天天看点

SpringCloudAlibaba——Sentinel(案例)

SpringCloudAlibaba——Sentinel(整合Ribbon、OpenFeign)

整合Ribbon

  1. 新建model

    cloudalibaba-consumer-nacos-order84

    cloudalibaba-provider-payment9003

    cloudalibaba-provider-payment9004

  2. 添加依赖(payment)
<dependencies>
        <!--spring cloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web/actuator这两个一般一起使用,写在一起-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>
                org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
           
  1. 改yml
server:
      port: 9003
    
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 # 配置nacos地址
    
    management:
      endpoints:
        web:
          exposure:
            include: "*"
           
  1. 写业务
    SpringCloudAlibaba——Sentinel(案例)
    9004 类似

新建 84消费者

SpringCloudAlibaba——Sentinel(案例)

添加依赖

<dependencies>
        <!--spring cloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--引入我们自定义的公共api jar包-->
        <dependency>
            <groupId>org.cjd</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--SpringCloud alibaba sentinel-datasource-nacos:后续做持久化用到-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!--SpringCloud alibaba Sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--openFeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--web/actuator这两个一般一起使用,写在一起-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--监控-->
        <dependency>
            <groupId>
                org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
           

改yml

server:
  port: 84

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: xxxxx:8848
    sentinel:
      transport:
        dashboard: localhost:8080 # 配置Sentinel dashboard地址
        port: 8719 #sentinel后台端口


# 消费者将要去访问的微服务名册:方便controller的@value获取
server-url:
  nacos-user-service: http://nacos-payment-provider
           

添加配置类

SpringCloudAlibaba——Sentinel(案例)

添加业务类

SpringCloudAlibaba——Sentinel(案例)

经过测试

fallback管运行异常

blockHandler管配置违规

整合OpenFeign

修改84 model

添加依赖

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

主启动类添加@EnableFeignClients注解

创建远程调用接口

@Component
    @FeignClient(value = "nacos-payment-provider",fallback = PaymentFallbackService.class) 
    //我们要到nacos中找nacos-payment-consumer这个微服务,并且指明了接口出错时的兜底方法
    
    public interface PaymentService {
    
        @GetMapping(value = "/paymentSQL/{id}") //去找nacos-payment-consumer服务中的相应接口
        public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id);
        
    }
           

创建远程调用接口实现类

@Component
    public class PaymentFallbackService implements PaymentService {
        
        //如果nacos-payment-consumer服务中的相应接口出事了,我来兜底
        @Override
        public CommonResult<Payment> paymentSQL(Long id) {
            
            return new CommonResult<>(4444444,"服务降级返回---PaymentFallbackService", new Payment(id, "errorSerial...."));
        }
    }
           

创建业务类

public class CircuitBreakerController {
    //===========openFeign
    @Resource
    private PaymentService paymentService;
    
    @GetMapping(value = "/consumer/paymentSQL/{id}")
    public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id){
        
        return paymentService.paymentSQL(id);
    }
}
           

测试即可

继续阅读