1、环境搭建
以8884模块为例
pom文件添加依赖
<!-- openfign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
yml添加
# 激活sentinel对feign的支持
feign:
sentinel:
enabled: true
启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderMain84 {
public static void main(String[] args) {
SpringApplication.run(OrderMain84.class, args);
}
}
创建远程调用接口
@FeignClient(value = "nacos-payment-provider")
public interface PaymentService {
@GetMapping("/payment/{id}")
public CommonResult<Payment> payment(@PathVariable("id")Long id);
}
实现类(用于服务降级)
@Component
public class PaymentFallbackService implements PaymentService {
@Override
public CommonResult<Payment> payment(Long id) {
return new CommonResult<Payment>(444, "服务降级返回--PaymentService", new Payment(id, "errorSerial"));
}
}
接口指定降级的类
@FeignClient(value = "nacos-payment-provider", fallback = PaymentFallbackService.class)
public interface PaymentService {
@GetMapping("/payment/{id}")
public CommonResult<Payment> payment(@PathVariable("id")Long id);
}
controller
@Resource
private PaymentService service;
@GetMapping("/payment/{id}")
public CommonResult<Payment> payment(@PathVariable("id")Long id){
return service.payment(id);
}
2、测试
启动9003、8884,如果中途9003出现问题关闭,8884服务降级成功
3、熔断框架比较
Sentinel | Hystrix | resilience4j | |
---|---|---|---|
隔离策略 | 信号量隔离 | 线程池/信号量隔离 | 信号量隔离 |
熔断降级策略 | 基于响应时间、异常比例、异常数 | 异常比例 | 异常比例、响应时间 |
实时统计 | 滑动窗口(LeapArray) | 滑动窗口(Rxjava) | Ring Bit Buffer |
动态规则 | 支持多种数据源 | 支持多种数据源 | 有限的支持 |
扩展性 | 多个扩展点 | 插件 | 接口 |
基于注解的支持 | 支持 | 支持 | 支持 |
限流 | QPS、调用关系 | 有限的支持 | Rate Limiter |
图片来源:尚硅谷 - 周阳 - Spring Cloud Alibaba
评论 (0)