将自定义标头与 Sleuth X-B3* 标头一起传递的最佳方式
Posted
技术标签:
【中文标题】将自定义标头与 Sleuth X-B3* 标头一起传递的最佳方式【英文标题】:Best way to pass custom headers along with Sleuth X-B3* headers 【发布时间】:2018-08-15 02:00:41 【问题描述】:根据 README here ,我使用以下配置将 x-vcap-request-id
和 x-vcap-group-id
从一个应用程序传递到另一个应用程序。
@Bean
public Factory propagationFactory()
return brave.propagation.ExtraFieldPropagation.newFactory(brave.propagation.B3Propagation.FACTORY,
"x-vcap-request-id", "x-vcap-group-id");
@Bean
public TracingFactoryBean tracing()
TracingFactoryBean tracingFactoryBean = new TracingFactoryBean();
tracingFactoryBean.setPropagationFactory(propagationFactory());
return tracingFactoryBean;
但是,此配置会破坏默认的侦探行为。使用此代码,Sleuth 不再将TraceId
和SpanId
添加到日志中
在微服务之间传递自定义标头的最佳/推荐方式是什么?
【问题讨论】:
【参考方案1】:如果您阅读docs on prefixed fields,您将看到以下部分
与之前版本的 Sleuth 的不同之处在于,使用 Brave,您 必须通过行李钥匙清单。有两个属性可以 实现这一点。使用 spring.sleuth.baggage-keys,您可以设置密钥 以 bag- 为前缀,用于 HTTP 调用,以 bag_ 为前缀,用于消息传递。 您还可以使用 spring.sleuth.propagation-keys 属性传递一个 被列入白名单的前缀键列表,没有任何前缀。
只需设置属性,一切就可以开箱即用。阅读项目文档总是好的。
【讨论】:
【参考方案2】:我没有使用TracingFactoryBean
,但在TracingBuilder
中添加Slf4jCurrentTraceContext
为我解决了这个问题。
return Tracing.newBuilder().propagationFactory(ExtraFieldPropagation.newFactory(B3Propagation.FACTORY, "request-id"))
.currentTraceContext(Slf4jCurrentTraceContext.create())
.build();
【讨论】:
以上是关于将自定义标头与 Sleuth X-B3* 标头一起传递的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章