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);
}
}
测试即可