rx-java - 为在 Vert.X 中运行的 RxJava 设置 Hystrix 崩溃的请求上下文

标签 rx-java hystrix

我想使用 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
  • 使用 HystrixContextSchedulerRxJavaHooks#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/

相关文章:

rx-java - 如何使用rxjava处理多个数据源?

java - 搜索服务失败时的设计模式

spring - Hystrix:无法连接到命令指标流

spring-boot - Hystrix Command注解在应用中是如何工作的

hystrix - 使用 Netflix Feign 和 Hystrix 设置请求超时

java - RxJava 2 - 调度程序抛出致命异常

java - 使用临时缓存请求远程 Observable 的 RxJava 模式

spring - 在@HystrixCommand 回退方法中获取失败异常

android - 如何迭代 Single<List<Item>>,然后根据条件执行任务?

rx-java - RxJava 中的 EventLoopScheduler 等价物?