传递自定义标题以及Sleuth X-B3 *标题的最佳方法

时间:2018-03-07 04:05:17

标签: spring spring-cloud spring-cloud-sleuth

根据README here,我使用以下配置将x-vcap-request-idx-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不再将TraceIdSpanId添加到日志

在微服务之间传递自定义标头的最佳/推荐方法是什么?

2 个答案:

答案 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();