标签:总结 FeignClient 调用 请求 hystrix 异步 整理 线程 熔断器
目录
HystrixCommand和HystrixObservableCommand
前言
之前是想做一个feignClient调用的异步化组件,然后调研后发现feignClient原生已对hystrix支持的很好,而hystrix已提供完善的异步化方案,并且提供降级/熔断等功能及策略配置。所以进而研究了下hystrix的原理,最后,掉进了rxjava的坑。
FeignClient原理及使用
首先移步官网
原理:Spring Cloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中。生成代理时Feign会为每个接口方法创建一个RequetTemplate对象,该对象封装了HTTP请求需要的全部信息,请求参数名、请求方法等信息都是在这个过程中确定的,Feign的模板化就体现在这里。
Feign 的精华是一种设计思想,它设计了一种全新的HTTP调用方式,屏蔽了具体的调用细节,与Spring MVC 注解的结合更是极大提高了效率(没有重复造轮子,又设计一套新注解。
请求判断逻辑:SynchronousMethodHandler.executeAndDecode (![200,300) || !404)
FeignClient对hystrix的支持
官网描述很清楚,两种方案
- 配置feign.hystrix.enabled=true
- 新建配置类,使用的时候在注解里加入configuration参数即可
hystrix两大功能相关配置
隔离
|
熔断
|
Hystrix原理介绍
官网:https://github.com/Netflix/Hystrix/wiki
Hystrix 的设计方案是通过命令模式加 RxJava 实现的观察者模式来开发的,想完全熟悉 Hystrix 的运作流程需要熟练掌握 RxJava
主要流程图
分析后结果如下:
getFallback()降级逻辑
1,以下四种情况将触发getFallback调用:
(
1
):run()方法抛出非HystrixBadRequestException异常
(
2
):run()方法调用超时
(
3
):熔断器开启拦截调用
(
4
):线程池/队列/信号量是否跑满
2,没有实现getFallback的Command将直接抛出异常
3,fallback降级逻辑调用成功直接返回
4,降级逻辑调用失败抛出异常
HystrixCommand和HystrixObservableCommand
1、HystrixCommand提供了同步和异步两种执行方式,而HystrixObservableCommand只有异步方式
2、HystrixCommand的run方法是用内部线程池的线程来执行的,而HystrixObservableCommand则是由调用方(例如Tomcat容器)的线程来执行的,因为是异步,所以两种方式都能很好的起到资源隔离的效果。
3、HystrixCommand一次只能发送单条数据返回,而HystrixObservableCommand一次可以发送多条数据返回,从上面的示例可以看出。
HystrixCommand 的 execute 和 queue 方法,以及 HystrixObservableCommand 的 observe()和 toObserve() 方法,最后都会转化成 HystrixObservableCommand 的 toObserve() 方法。
如图:
详细:https://www.jianshu.com/p/b9af028efebb
hystrix任务执行代码:AbstractCommand.executeCommandAndObserve
冷observe和热:https://zhuanlan.zhihu.com/p/28628089
AbstractCommand.executeCommandAndObserve
RxJava简单介绍
RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava ,概括得非常精准。
其实, RxJava 的本质可以压缩为异步这一个词。说到根上,它就是一个实现异步操作的库,而别的定语都是基于这之上的。
Rx基于观察者模式,他是一种编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。ReactiveX.io给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华。
总结
hystrix异步方案
- 启用hystrix
- 给接口方法的返回值用HystrixCommand包裹
- 调用时,有以下几种方式:
|
调用方启用线程池异步
参考资料
标签:总结,FeignClient,调用,请求,hystrix,异步,整理,线程,熔断器 来源: https://blog.csdn.net/iverson2010112228/article/details/115872677
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。