0

我有几个微服务:A 和 B。A 调用 B,B 调用一些外部服务。A 和 B 使用 Sleuth。Sleuth 定义了标头 X-B3-TraceId 和 X-B3-SpanId。

所以A会将标头传播到B和B到外部服务......

问题:服务 B 是否存储他的标头直到响应?如果外部服务以某种方式破坏了我的标头,并且作为响应,我将在标头中得到错误的 ID……会发生什么?定义我自己的标题以避免这种冲突会更好吗?与外部服务交互的最佳方式是什么?

4

1 回答 1

1

问题:服务 B 是否存储他的标头直到响应?我并没有真正遵循,但我认为问题是如果响应返回并进行一些额外的处理,是否会保留跟踪信息。答案是肯定的,它会被传播。

如果外部服务以某种方式破坏了我的标头,并且作为响应,我将在标头中得到错误的 ID……会发生什么?

响应头对我们来说并不重要。请求包含所有跟踪信息。外部服务不会在您的系统内部看到,因为您不会将 SR 和 SS 注释从它们一侧获取到您的 Zipkin 实例。因此,在向他们发送请求后,您显然不会知道他们那边会发生什么。

定义我自己的标题以避免这种冲突会更好吗?与外部服务交互的最佳方式是什么?

我想我已经设法通过解释请求标头很重要而不是响应来响应它。

于 2017-10-23T11:02:48.570 回答