第七章中在ProductController 和OrderController 中都使用了局部服务降级,但同时也导致两个问题, 通过观察两个局部降级的案例,可以发现: 每个业务方法都对应一个降级方法,会导致代码
第七章中在ProductController 和OrderController 中都使用了局部服务降级,但同时也导致两个问题, 通过观察两个局部降级的案例,可以发现: 每个业务方法都对应一个降级方法,会导致代码膨胀业务逻辑方法和处理服务异常降级方法混在一起。 业务逻辑方法和处理服务异常降级方法混在一起,不便于维护,为解决此问题,可以使用注解 @FeignClient(value = "PRODUCT-SERVICE",fallback = xxx.class)在调用远端服务的接口上进行指定服务降级方法解耦,并实现调用远端服务的接口的实现类,在实现类中统计管理服务降级解耦的方法。 进行全局解耦,以 订单服务 OrderController 调用 商品服务ProductController 为案例,过程如下: 1、订单服务 和 商品服务引入依赖 订单服务引入依赖 openfegin , 商品服务分别引入依赖 Hystrix 2、清除OrderController 和 ProductController 所有降级方法 清除OrderController 所有降级方法
清除 ProductController 所有降级方法 注意,若有全局或者专属降级可以自己增加。此处为方便演示,不使用全局或者专属。
2、定义Feign接口的实现类 因为订单服务 OrderController中通过 接口IOrderFeignService和 注解@FeignClient 远程调用商品服务ProductController,因此当订单服务 OrderController出现超时或异常,可以通过订单服务 OrderController中通过 接口IOrderFeignService的 实现类OrderFeignServiceFallBack 将务逻辑的处理方法 和 降级方法进行解耦。
3、修改IOrderFeignService代码 在 接口IOrderFeignService的注解@FeignClient中指定服务解耦的类OrderFeignServiceFallBack 。
4、定义 订单服务 和 商品服务主启动类 由于订单服务中引入的spring-cloud-starter-openfeign依赖中已经集成了feign-hystrix,有了对 Hystrix 的支持,所以不需要额外引入依赖项。如果需要开启 订单服务端的hystrix服务,只需要在订单服务的配置文件配置feign-hystrix 进行激活Hystrix,无需在主启动类中添加注解 @EnableHystrix 或 @EnableHystrix 来开启Hystrix服务。订单服务 和 商品服务主启动类如下: 订单服务主启动类 OrderServerApplication
商品服务主启动类 ProductServerApplication
4、开启openfeign在调用服务过程中开启hystrix支持 由于前面引入的spring-cloud-starter-openfeign依赖中已经集成了feign-hystrix,有了对 Hystrix 的支持,所以不需要额外引入依赖项。只需要在订单服务的 application.yml 配置文件中开启openfeign在调用服务过程中开启hystrix支持。
5、修改订单服务配置文件 由于订单服务中引入的spring-cloud-starter-openfeign依赖中已经集成了feign-hystrix,有了对 Hystrix 的支持,所以不需要额外引入依赖项。如果需要开启 订单服务端的hystrix服务,只需要在订单服务的配置文件配置feign-hystrix 进行激活Hystrix,修改application.yml如下:
6、进行测试 分别访问 http://localhost:9000/order/buy/1 和 http://localhost:9000/order/delete/1 查看浏览器结果如下: |
2021-06-05
2021-05-27
2021-05-26
2021-06-05
2021-05-16