根据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
添加到日志
在微服务之间传递自定义标头的最佳/推荐方法是什么?
答案 0 :(得分:1)
如果您阅读docs on prefixed fields,则会看到以下部分
与之前版本的侦探的不同之处在于,对于Brave,你 必须通过行李钥匙清单。有两个属性 实现这一点。使用spring.sleuth.baggage-keys,您可以设置密钥 以行李为前缀 - 用于HTTP呼叫和行李_用于消息传递。 您还可以使用spring.sleuth.propagation-keys属性来传递 列入白名单且没有任何前缀的前缀键列表。
只需设置属性,即可开箱即用。阅读项目文档总是很好。
答案 1 :(得分:1)
我没有使用TracingFactoryBean
,但是在Slf4jCurrentTraceContext
中添加TracingBuilder
可以解决我的问题。
return Tracing.newBuilder().propagationFactory(ExtraFieldPropagation.newFactory(B3Propagation.FACTORY, "request-id"))
.currentTraceContext(Slf4jCurrentTraceContext.create())
.build();