Spring Cloud Alibaba 入门级完整的项目搭建与服务调用

一,Nacos注册中心下载与安装

1.下载安装

https://gitee.com/mirrors/Nacos?_from=gitee_search //码云上下载的更快一点

打开下载文件的根目录输入cmd打开命令窗输入打包命令。

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

2.启动

全部打包完成后可以开始启动项目

进入到此目录:E:\ZouWorkSpace\MyTest\Nacos\distribution\target\nacos-server-1.4.1\nacos\bin
或者 cd distribution/target/nacos-server-$version/nacos/bin

在此目录下cmd打开命令窗口
windows系统下执行: cmd startup.cmd -m standalone(注意有坑,1.如果此命令无效,直接输入startup.cmd -m standalone,2,此命令为单机模式启动,如果直接双击文件启动可能会报错)
Lunix系统下执行: sh startup.sh -m standalone

启动完毕后:http://locahost:8848/nacos 可直接进去Nacos登录界面(账号密码皆为:nacos)

3.Nacos的配置

如果我们在项目中使用yml格式的配置文件时,我们需要在此配置格式。

添加如下配置

以上Nacos注册服务中心就初步完成了,下面我们来写服务提供者。

二,创建服务提供者

1,新建父类管理依赖。

1,新建文件夹 spring-cloud-alibaba

2, 在idea中打开该文件夹,在此目录下新建pom.xml文件,导入相关依赖,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zpa.alibaba</groupId>
    <artifactId>spring-cloud-alibaba</artifactId>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>alibaba-provider2</module>
        <module>alibaba-provider1</module>
    </modules>

    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            <version>0.9.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

</project>

一定要主要版本搭配,不然会报错。具体参考此链接,也有配置,依赖相关的文档:

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

2,新建服务提供者

1,在spring-cloud-alibaba文件下新建—>Module—>Maven—>创建项目alibaba-provider1

2,pom.xml中无需导入依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-alibaba</artifactId>
        <groupId>com.zpa.alibaba</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-provider2</artifactId>

</project>

3, 在java目录下新建项目包com.zpa.alibaba,在包目录下新建项目的启动类。

package com.zpa.alibaba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Author user
 */
@SpringBootApplication
@EnableDiscoveryClient
public class Provider1Application {
    public static void main(String[] args) {
        SpringApplication.run(Provider1Application.class,args);
    }
}

4, 在resources目录下新建application.yml配置文件

5,如配置文件不是小绿叶图标,File–>Project Structure–>Module–>,,,输入application搜索添加即可

6,在配置中导入配置文件内容

server:
  port: 8700 #项目端口

spring:
  application:
    name: alibaba-provider1 #项目名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #注册中心Nacos路径端口
management:
  endpoints:
    web:
      exposure:
        include: "*"  #健康状态监测

项目结构目录如下(具体实现方法自己去写)

7,启动项目,然后在Nacos注册中心下服务列表下可查看是否已注册。

8,简单创建一个controller,方便待会消费者测试。

package com.zpa.alibaba.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author user
 */
@RestController
public class HelloProvider1 {

    @GetMapping(value = "/hello/{message}")
    public String HelloProvider1(@PathVariable String message) {
        return "Hello" + message;
    }
}

9,服务提供者创建完毕。

三,创建服务消费者

1,往父类添加消费者openfeign依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2,在spring-cloud-alibaba文件下新建—>Module—>Maven—>创建项目alibaba-consumer1

3,java目录下创建Consumer1Application启动类,添加@EnableFeignClients注解

package com.zpa.alibaba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @Author user
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Consumer1Application {
    public static void main(String[] args) {
        SpringApplication.run(Consumer1Application.class,args);
    }
}

4,在resources目录下新建application.yml配置文件

server:
  port: 8701

spring:
  application:
    name: alibaba-consumer1
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
management:
  endpoints:
    web:
      exposure:
        include: "*"

5,创建service接口

package com.zpa.alibaba.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @Author user
 */
@FeignClient(value = "alibaba-provider1")
public interface Provider1Service {
    @GetMapping(value = "/hello/{message}")
    String hello(@PathVariable(value = "message") String message);

}

6,创建controller接口

package com.zpa.alibaba.controller;

import com.zpa.alibaba.service.Provider1Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author user
 */
@RestController
public class Consumer1Controller {
    @Autowired
    private Provider1Service provider1Service;

    @GetMapping(value = "/hello")
    public String HelloProvider1() {
        return provider1Service.hello("hahahahahahah ");
    }
}

7,访问http://localhost:8701/hello接口

8,消费者创建完毕!

四,Sentinel的简单使用

依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

启动方式
下载Sentinel后在E:\ZouWorkSpace\MyTest\Sentinel\sentinel-dashboard\target>文件下cmd窗口输入

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

消费者yml配置类

server:
  port: 8701

spring:
  application:
    name: alibaba-consumer1
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080
feign:
  hystrix:
    enabled: true
    
management:
  endpoints:
    web:
      exposure:
        include: "*"

消费者接口类

package com.zpa.alibaba.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.zpa.alibaba.fallback.CustomerFallback;
import com.zpa.alibaba.blockHandler.CustomerBlockHandler;
import com.zpa.alibaba.service.Hello1Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author user
 * 消费者使用
 */
@RestController
public class Consumer1Controller {
    @Autowired
    private Hello1Service hello1Service;

    @GetMapping(value = "/hello")
    @SentinelResource(value = "/helloConsumer",blockHandlerClass = CustomerBlockHandler.class,blockHandler="testblockHandler",
            fallbackClass = CustomerFallback.class,fallback = "testFallback")
    public String helloConsumer() {
        return hello1Service.hello("我是一个服务消费者!!! ");
    }
}

限流自处理类

package com.zpa.alibaba.blockHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;

/**
 * @Author user
 * 流控规则。访问太快了
 * 限流自定义处理优化出里
 */
public class CustomerBlockHandler {
    //降级逻辑(备选逻辑),BlockException参数必须写
    //方法定义为静态方法
    public static String testblockHandler(BlockException exception){

        return "有流控规则限流了,访问过快了,慢点点。。。";
    }
}

服务降级自处理类

package com.zpa.alibaba.fallback;

/**
 * <p>title: com.wfx.fallback</p>
 * <p>Company: wendao</p>
 * author zhuximing
 * date 2020/10/29
 * description:服务熔断降级异常自定义处理
 */
public class CustomerFallback {

    //降级逻辑(备选逻辑),BlockException参数必须写
    //方法定义为静态方法
    public static String testFallback(Throwable throwable) throws Exception{

        return "服务提供有问题,已经降级了,耐性等待一会。。。 ";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值