簡體   English   中英

跨微服務請求傳遞關聯 ID:哪個是最佳策略?

[英]Passing Correlation Id across Microservices requests: Which is the best strategy?

假設有一個微服務X必須調用微服務Y的示例場景。 需要將后續調用與 Correlation-ID 相關聯。 Micoservices 基於 Java (Spring Boot) 並公開 REST 和 GRPC api:

  1. X ms ”被稱為將 Correlation-Id 傳遞到header 中
  2. X ms ”中的攔截器攔截請求並將“某處”(例如 MDC 中的 JAVA)放入Correlation-Id
  3. X ms控制器被觸發並將業務邏輯的執行委托給業務層中的服務類方法
  4. Service 類方法執行一些操作並通過從“某處”加載Correlation-Id來調用“Y ms

在此處輸入圖片說明

存儲上下文數據(如相關性 ID)的更好位置是什么,為什么?

  1. 設計具有特定簽名的方法,以便在內部方法之間傳遞上下文數據。
  2. 使用 MDC。
  3. 使用線程本地。
  4. 在需要的地方注入 RequestContext(用於 REST)或使用 Context (GRPC)
  5. 其他

謝謝!

我不會使用 ThreadLocal 或 MDC(它基於線程本地),因為如果有一天您想要移動到基於事件循環的服務(例如使用 reactor/web-flux),它將鎖定您的實現細節。

您可以自己在 Context 對象內的方法中傳播上下文,該對象將在您的層之間流動(從控制器到業務邏輯再到 DAL)。 這里的好處是您對此非常明確,這可能是更易於維護的代碼。

您還可以考慮研究 spring sleuth(也與 zipkin 集成)。 它的核心本質上是基於 MDC,但它也應該支持 reactor。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM