繁体   English   中英

Java Spring - 在多个线程之间共享数据

[英]Java Spring - share data between several threads

我是 Java 和 Spring 的新手。

我有一个 Spring 应用程序,在一个微服务架构中,我想为每个请求添加一个唯一的请求 id,以用于所有微服务。 我想到的方法是,当请求进入服务时,我寻找一个唯一的标头,如果它存在,我获取标头的值并将其存储在上下文中,如果它不存在,我生成唯一 ID 并将其存储在上下文中。 在任何传出网络调用中,我从上下文中获取该值并将其作为标头附加到请求中。

这很好用,直到......不幸的是,在我们的一项服务中,有很多使用 @Async 注释的多线程使用。 因此,我无法访问上下文并获取唯一 ID。

一种选择是将该 ID 注入到任何 Async 方法中,但是,这很难看。

我是 Spring 新手,但这听起来像是过去有人已经解决的问题。 我试图寻找答案,但找不到。

任何想法?

如果您这样做是为了通过所有涉及的微服务跟踪请求,您可以使用Spring Cloud Sleuth

您需要做的就是将 maven/gradle 依赖项添加到所有微服务,它将向所有传出调用添加具有唯一 id 的跟踪标头或转发现有的标头(如果使用它调用微服务)。

正如上面的答案所建议的 - 使用 Sleuth 获取跟踪 ID 和 Span ID 来确定跨多个微服务的各种线程。 您还可以配置现有的日志服务,例如 logback、log4j2、sl4j 以通过 sleuth 推送日志。

此外,您可以配置 zipkin 以分析来自此跟踪和 span id 的任何操作。 Zipkin 将充当分布式跟踪的集中管理器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM