2017-08-13 66 views
1

請求通道是一個分散通道。向3個微服務(出站網關)發送請求。我期待不同的服務範圍能夠正確跟蹤不同的服務。我正在使用春天的偵探。使用DefaultHeaderMapper來映射標題。 我的問題是: 1.如何生成span id,服務器/客戶端在哪裏?任何參考文件要研究。 2.如何解決彈簧一體化中重複跨度的問題?重複跨度彈簧整合

+0

瞭解Sleuth的工作原理。如果TraceId,SpanId不通過標題,它們將在服務器端生成。所以我試圖從標題中刪除SpanId。因爲我使用的是defaultHttpHeaderMapper,所以有一種排除標題的方法。 –

+0

WARN osihsDefaultHttpHeaderMapper - 包含值的標頭'errorChannel'------ WARN osihsDefaultHttpHeaderMapper - 標頭'replyChannel'的值------ WARN osihsDefaultHttpHeaderMapper - 標頭'currentSpan'的值爲'[Trace:5cd1817fb7f77f47 ,'Span:0744723df67d9f43,Parent:5cd1817fb7f77f47,exportable:false]'------ WARN osihsDefaultHttpHeaderMapper - 標題'X-Current-Span'的值爲'[Trace:5cd1817fb7f77f47,Span:0744723df67d9f43,Parent:5cd1817fb7f77f47,exportable :false]' –

+0

但是我找不到從哪裏開始創建X-Current-Span,currentSpan並將其設置爲DeafultHeaderMapper。這又再次出現另一個問題:如何刪除這些頭文件並僅傳遞X-B3-TraceId以避免重新創建服務器中的跟蹤。 –

回答

1

發送消息時,會在客戶端生成span。然後它在消息到達時被傳播。如果有消息到達並且沒有消息頭,則會創建該跨度。一切都寫在文檔(http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html),所以只需閱讀文檔。至於重複跨度的解決方案,我不知道你在說什麼,所以我想你需要提供更詳細的描述或樣本來複制問題。

+0

>發送請求到3個微服務 我想你通過'PublishSubscribeChannel'來做到這一點。在這種情況下,相同的消息被髮送3次,因此,我們有3個副本,並且顯然具有相同的頭文件,包括'span'。我不確定它是如何工作的,但是IMO應該考慮在這裏使用'child span',因爲同一父消息被髮送到不同的下游分支。或者...將每個發佈 - 訂閱分支的當前'span'複製粘貼到一個新的'span'。 –

+0

是的,publishSubscribe頻道是所有3個出站網關的請求頻道。 –

+0

我已經提供了更多詳細信息給我的問題,請幫忙找到詳細信息 –