189 8069 5689

springcloud如何实现基于feign的服务接口的统一hystrix降级处理

这篇文章主要介绍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 Result createProduct(@RequestBody Product product);
 
 /**
  * 修改商品
  * @param product
  */
 @PutMapping(value="/api/product/update", produces=APPLICATION_JSON, consumes=APPLICATION_JSON)
 public Result updateProduct(@RequestBody Product product);
 
 /**
  * 删除商品
  * @param productId
  */
 @DeleteMapping(value="/api/product/delete/{productId}", produces=APPLICATION_JSON)
 public Result deleteProductById(@PathVariable("productId") Long productId);
 
 /**
  * 根据productId获取商品信息
  * @param productId
  * @return
  */
 @GetMapping(value="/api/product/{productId}", produces=APPLICATION_JSON)
 public Result getProductById(@PathVariable("productId") Long productId);
 
 /**
  * 根据条件查询商品列表(分页、排序)
  * @param condition
  * @param page
  * @param sort
  * @return
  */
 @GetMapping(value="/api/product/list1", produces=APPLICATION_JSON)
 public PageResult> getProductListByPage(@RequestParam Product condition, @RequestParam Page page, @RequestParam Sort sort);
}

对应的熔断降级处理类:

@Component
public class ProductFallbackApiService implements ProductApiService {

 private static final HttpStatus SERVICE_UNAVAILABLE = HttpStatus.SERVICE_UNAVAILABLE;
 
 protected  Result 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或者PageResult,这样才有统一全局处理的可能,否则每个服务的fallback你是省不了的

本文将采用Cglib动态代理来统一处理这些fallback,说来容易做起来却十分棘手,完成这一功能,费了相当大的力气:

springcloud如何实现基于feign的服务接口的统一hystrix降级处理

代码说明:

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降级处理”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


网页标题:springcloud如何实现基于feign的服务接口的统一hystrix降级处理
文章位置:http://cdxtjz.cn/article/ihshej.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。