天天看點

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);
    }
}
           

測試即可

繼續閱讀