上面的降级策略,很明显造成了代码的杂乱,提升了耦合度,而且按照这样,每个方法都需要配置一个兜底方法,很繁琐。现在将降级处理方法(兜底方法)做一个全局的配置,设置共有的兜底方法和独享的兜底方法。
全局服务降级处理在服务消费方上面实现
(1)在消费方的controller里面编写全局降级逻辑的方法
// 全局降级处理方法
public String globalHandler(){
return “这是全局处理降级逻辑的方法…”;
}
(2)使用注解开启全局服务降级逻辑处理
(3)启动测试
全局服务降级—服务降级方法的抽取
问题:跟业务逻辑混合,解决(解耦):
先将服务消费方关于降级处理的配置全部清除
(1)在yml配置文件开启Feign基于对Hystrix的支持
//用于服务降级 在注解@FeignClient 中添加 fallback 属性值
feign:
hystrix:
enabled: true # 在feign中开启 hystrix
(2)定义一个类实现Feign客户端接口
@Component
public class FallBackService implements OrderService {
@Override
public String paymentInfo_OK(Integer id) {
return “进行paymentInfo_OK方法降级处理…”;
}
@Override
public String paymentInfo_Timeout(Integer id) {
return "进行paymentInfo_Timeout方法降级处理";
}
}
(3)修改Feign客户端接口
@FeignClient(value = “cloud-payment-service”,fallback = FallBackService.class)
public interface OrderService {
@GetMapping("/payment/hystrix/{id}")
public String paymentInfo_OK(@PathVariable("id")Integer id);
@GetMapping("/payment/hystrix/timeout/{id}")
public String paymentInfo_Timeout(@PathVariable("id")Integer id);
}
(4)测试
这次我们模拟服务提供方挂掉了,将8001服务停止