如何在Project Reactor中传递线程局部变量

时间:2017-04-30 10:11:35

标签: project-reactor

我开始使用项目反应堆。有谁知道如何将线程局部变量从一个线程传递到另一个线程?我在Hooks.java上看到了一些方法,但无法弄清楚推荐的方法是什么。有人可以指向我一些文档或有关如何执行它的代码片段。感谢。

2 个答案:

答案 0 :(得分:3)

我在这个github存储库中有一个基于spring-cloud-sleuth实现的工作示例:https://github.com/gumartinm/JavaForFun/tree/master/SpringJava/WebReactive/spring-webreactive-reactor-context-enrich

关键类为:ContextCoreSubscriber.javaSubscriberContext.javaThreadContextEnrichmentAutoConfiguration.javaUsernameFilter.java

  • ContextCoreSubscriber.java:
    使您能够填写映射的诊断上下文:MDC
  • SubscriberContext.java:
    在反应堆的上下文中插入数据的帮助程序类。
  • ThreadContextEnrichmentAutoConfiguration.java:
    负责配置反应堆的挂钩:Hooks.onEachOperator
  • UsernameFilter.java:
    我们想要基于一些HTTP标头注册用户名信息的示例。

答案 1 :(得分:0)

Reactor不保证FluxMono运算符链完成的处理将在单个线程上执行。相反,它执行工作窃取并允许用户切换执行上下文。

因此,使用ThreadLocal并不适合Reactor。

目前在3.1.0中已经完成了一些工作,提供了一个等价的,至少对于使用Reactor的图书馆作者而言,但尚无定论。 请密切注意3.1.0,这应该是该版本的主题(并且可能是第二个即将到来的里程碑M2的重点)。