我想使用 Hystrix (1.5.12) 与在 Vert.X (3.3.3) 中运行的 RxJava (1.3.3) 合并。我遇到的问题是没有为请求缓存键的线程设置 Hystrix 请求上下文。
我在收到请求时创建一个 Hystrix 请求上下文,并将此上下文作为参数传递给创建可观察对象的所有类。
创建 HystrixObservableCollapser
实现并在创建的折叠器上调用 toObservable()
的类,在某个 Vert.X 事件循环线程上被调用。
对上面返回的可观察对象的订阅,可能在也可能不在折叠器创建线程上。这个订阅线程不同于请求进入的线程和创建 Hystrix 请求上下文的线程。所以没有为订阅线程设置Hystrix请求上下文。
我已阅读 HystrixRequestContext in case of async requests和其他问题,我已经尝试了一些 RxJava 和 Hystrix 钩子(Hook),但它们似乎都不起作用:
RxJavaHooks#setOnScheduleAction
HystrixConcurrencyStrategy#wrapCallable
- 使用
HystrixContextScheduler
在RxJavaHooks#setOnComputationScheduler
(以及其他 2 个调度程序 Hook )中包装 RxJava 调度程序。
当我在传递给折叠器返回的可观察对象的 doOnSubscribe(...)
的 lambda 中设置 Hystrix 请求上下文时,以下 Hook 开始起作用:
RxJavaHooks#setOnScheduleAction
- 在
RxJavaHooks#setOnComputationScheduler
中包装 RxJava 调度程序(以及其他 2 个调度程序 Hook )。
正在折叠器返回的可观察对象的 doOnSubscribe(...)
中为当前线程设置 Hystrix 请求上下文,并使用上面 2 个 Hook 中的 1 个,设置Hystrix 请求上下文?
如果是这样,哪种钩子(Hook)是首选方法?
如果不是,如何正确确保为线程设置Hystrix请求上下文?
最佳答案
我没有将此标记为答案,因为我不能 100% 确定这是正确的方法。但这对我有用。
我正在使用 RxJava 调度程序 Hook ,结合 doOnSubscribe(...)
对折叠器返回的可观察对象。
关于rx-java - 为在 Vert.X 中运行的 RxJava 设置 Hystrix 崩溃的请求上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856109/