簡體   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