重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍springcloud如何实现基于feign的服务接口的统一hystrix降级处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联专注于企业全网营销推广、网站重做改版、南山网站定制设计、自适应品牌网站建设、H5高端网站建设、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为南山等各大城市提供网站开发制作服务。
springcloud开发微服务时,基于feign来做声明式服务接口,当启用hystrix服务熔断降级时,项目服务众多,每个Feign服务接口都得写一些重复问的服务降级处理代码,势必显得枯燥无味:
Feign服务接口:
@FeignClient(name="springcloud-nacos-producer", qualifier="productApiService", contextId="productApiService", fallback=ProductFallbackApiService.class) public interface ProductApiService { /** * 创建商品 * @param product */ @PostMapping(value="/api/product/add", produces=APPLICATION_JSON, consumes=APPLICATION_JSON) public ResultcreateProduct(@RequestBody Product product); /** * 修改商品 * @param product */ @PutMapping(value="/api/product/update", produces=APPLICATION_JSON, consumes=APPLICATION_JSON) public Result
对应的熔断降级处理类:
@Component public class ProductFallbackApiService implements ProductApiService { private static final HttpStatus SERVICE_UNAVAILABLE = HttpStatus.SERVICE_UNAVAILABLE; protectedResult defaultFallbackResult() { return Result.failure().code(String.valueOf(SERVICE_UNAVAILABLE.value())).message(String.format("请求失败:%s, %s", SERVICE_UNAVAILABLE.value(), SERVICE_UNAVAILABLE.getReasonPhrase())).build(); } protected PageResult defaultFallbackPageResult() { return PageResult.failure().code(String.valueOf(SERVICE_UNAVAILABLE.value())).message(String.format("请求失败:%s, %s", SERVICE_UNAVAILABLE.value(), SERVICE_UNAVAILABLE.getReasonPhrase())).build(); } @Override public Result createProduct(Product product) { return defaultFallbackResult(); } @Override public Result updateProduct(Product product) { return defaultFallbackResult(); } @Override public Result deleteProductById(Long productId) { return defaultFallbackResult(); } @Override public Result getProductById(Long productId) { return defaultFallbackResult(); } @Override public PageResult > getProductListByPage(Product condition, Page page, Sort sort) { return defaultFallbackPageResult(); } }
当服务较多时写这样重复的统一熔断降级处理显得十分枯燥无味!
前提场景是你的服务接口具有统一的报文格式,例如我的是Result
本文将采用Cglib动态代理来统一处理这些fallback,说来容易做起来却十分棘手,完成这一功能,费了相当大的力气:
代码说明:
1、包org.springframework.cloud.openfeign中的都是为实现这一功能自定义的东西,至于包名为什么取org.springframework.cloud.openfeign,那是因为org.springframework.cloud.openfeign.Targeter这个接口声明是protected的
2、上面4个类:DefaultFeignClientsConfiguration.java、DefaultHystrixFallbackHandler.java、DefaultHystrixFallbackHandlerFactory.java、HystrixFallbackResults.java是在项目中具体使用的具体配置
代码位置:
1、https://github.com/penggle/xmodule/tree/master/xmodule-common-springcloud
2、https://github.com/penggle/xmodule/tree/master/xmodule-examples-springcloud/xmodule-examples-springcloud-nacos
快速上手入口:https://github.com/penggle/xmodule/blob/master/xmodule-common-springcloud/src/main/java/org/springframework/cloud/openfeign/HystrixFallbackConfiguration.java
以上是“springcloud如何实现基于feign的服务接口的统一hystrix降级处理”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!