我有一個服務A創建一封電子郵件並將其發送給客戶。客戶將收到電子郵件,並最終點擊正文中的鏈接觸發服務B.spring cloud sleuth:手動觸發的異步服務
如何關聯兩個不同且完全隔離的服務,這些服務與sleuth是同一業務流程的一部分?
我應該離開跨度「打開」還是有辦法以某種方式在郵件中「嵌入」跟蹤ID?
我有一個服務A創建一封電子郵件並將其發送給客戶。客戶將收到電子郵件,並最終點擊正文中的鏈接觸發服務B.spring cloud sleuth:手動觸發的異步服務
如何關聯兩個不同且完全隔離的服務,這些服務與sleuth是同一業務流程的一部分?
我應該離開跨度「打開」還是有辦法以某種方式在郵件中「嵌入」跟蹤ID?
您可以使用異步通信(http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_asynchronous_communication),例如通過名爲TraceableExecutorService
(http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html#_executor_executorservice_and_scheduledexecutorservice)的ExecutorService
的跟蹤表示。你發出一個可以完成的未來,將在一個單獨的線程中處理數據。在某個時候你阻止,然後你可以檢索數據。跟蹤表示ExecutorService
將跟蹤傳遞跟蹤數據。
更新: 但是,如果這些完全是兩個獨立的過程,那麼我會關閉跨度,並在有人點擊鏈接時創建一個完全獨立的跨度。你不應該明確地打開跨度。綁定2個進程的將是跟蹤標識。從UI的角度來看,Zipkin尚不能以最好的方式支持這些長時間的生活任務,但還有一些工作正在進行中(通過所謂的鏈接跨度)來改進它(
)正是這些是兩個完全分開的服務,因此,完全理解綁定它們的是跟蹤標識。唯一的問題是,我不確定如何傳遞跟蹤ID,因爲第二項服務是由用戶從電子郵件正文的鏈接隨機觸發的。這不是一種典型的微服務範例,您可以在這些範例中有服務互相交流或對數據管道作出反應。這些服務完全無關,但它們應該在日誌中顯示相同的跟蹤標識。 – pgs
您必須將此信息存儲在某處 - 不幸的是:沒有其他方式,/可以在電子郵件鏈接中傳遞(hashed?)traceid? –
這是我第一次猜測。在這種情況下,我真的需要存儲或傳遞它。您會建議您在整個代碼中聲明使用跟蹤和跨度,而不是依賴註釋和執行程序嗎? – pgs