我想使用在vert.x(3.3.3(中运行的rxjava(1.3.3(折叠的hyStrix(1.5.12(。我遇到的问题是,HyStrix请求上下文未设置为请求缓存键的线程。
我在请求进来时创建一个hystrix请求上下文,并将此上下文作为参数传递给所有创建可观察到的类。
创建HystrixObservableCollapser
实现并在创建的倒塌器上调用toObservable()
的类,在某些Vert.x事件循环线程中被调用。
上面可观察到的可观察到的订阅可能在折叠式构造线上可能或不在。此订阅线程与请求的线程不同,并创建了Hystrix请求上下文。因此,未为订阅线程设置Hystrix请求上下文。
在异步请求和其他问题的情况下,我已经阅读了HyStrixRequestContext,并且我已经尝试了许多RXJAVA和HYSTRIX挂钩,但它们似乎都没有工作:
-
RxJavaHooks#setOnScheduleAction
-
HystrixConcurrencyStrategy#wrapCallable
- 用
HystrixContextScheduler
将RXJAVA调度程序包装在RxJavaHooks#setOnComputationScheduler
(以及其他2个调度程序挂钩(中。
当我在collapser返回的可观察到的 doOnSubscribe(...)
中设置hyStrix请求上下文时,事情确实开始适用于以下钩子:
-
RxJavaHooks#setOnScheduleAction
- 将RXJAVA调度程序包装在
RxJavaHooks#setOnComputationScheduler
中(以及其他2个调度程序钩(。
是否为倒塌者返回的可观察到的doOnSubscribe(...)
中的当前线程设置了Hystrix请求上下文,并使用上面的2个挂钩中的1个设置HyStrix请求上下文的正确方法?
如果是这样,则首选方法是哪个挂钩?
如果没有,如何正确确保为线程设置Hystrix请求上下文?
我没有将其标记为答案,因为我不是100%确定这是正确的方法。但这对我有用。
我正在使用rxjava调度程序挂钩,并结合倒塌者返回的观察处的doOnSubscribe(...)
。