【问题标题】:Best way to pass custom headers along with Sleuth X-B3* headers将自定义标头与 Sleuth X-B3* 标头一起传递的最佳方式
【发布时间】:2018-08-15 02:00:41
【问题描述】:

根据 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 添加到日志中

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

【问题讨论】:

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


    【解决方案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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        相关资源
        最近更新 更多