SpringCloudAlibaba——Sentinel(整合Ribbon、OpenFeign)
整合Ribbon
-
建立model
cloudalibaba-consumer-nacos-order84
cloudalibaba-provider-payment9003
cloudalibaba-provider-payment9004
- 添加依賴(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>
- 改yml
server:
port: 9003
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 配置nacos位址
management:
endpoints:
web:
exposure:
include: "*"
- 寫業務 9004 類似
SpringCloudAlibaba——Sentinel(案例)
建立 84消費者
添加依賴
<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
添加配置類
添加業務類
經過測試
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);
}
}
測試即可