【问题标题】:spring sleuth baggage propagation not getting propagated/working春季侦探行李传播没有传播/工作
【发布时间】:2020-10-18 05:01:22
【问题描述】:

我们目前正在使用 sleuth 2.2.3.RELEASE,我们看不到在 http 标头中传递的字段 userId 没有传播。下面是我们的代码。

BaggageField REQUEST_ID = BaggageField.create("x-vcap-request-id");
    BaggageField USER_ID = BaggageField.create("userId");
    
    Tracing.newBuilder().propagationFactory(
            BaggagePropagation.newFactoryBuilder(B3Propagation.FACTORY)
            .add(SingleBaggageField.remote(REQUEST_ID))
            .add(SingleBaggageField.newBuilder(USER_ID).addKeyName("baggage-user-id").build())
            .build());

我们怀疑 YML 文件中的一些问题。我们尝试了以下所有选项,但没有一个有效。

#1 baggage-keys: baggage-user-id 
#2 propagation-keys: baggage-user-id
#3 baggage-keys: user-id 

在logback中:

%X{baggage-user-id:-}

我们在 http 标头中传递 userId。

【问题讨论】:

    标签: spring spring-cloud-sleuth


    【解决方案1】:

    请不要创建您自己的跟踪实例。您可以创建将在跟踪 bean 中结束的 bean。

    这里有一个使用最新 3.x api 的示例

    spring:
     sleuth:
      baggage:
       correlation-fields:
        - TEST-COMMUNICATION-TYPE
       remote-fields:
        - TEST-COMMUNICATION-TYPE
    

    旧的,已弃用的 api

    spring:
      application:
        name: service1
      sleuth:
        baggage-keys:
          - baggage
          - key
        log.slf4j.whitelisted-mdc-keys:
          - key
    

    我们如何取回行李

    log.info("Service2: Baggage for [key] is [" + BaggageField.getByName("key") + "]");
    

    我们如何放置行李

    String baggageKey = "key";
        String baggageValue = "foo";
        BaggageField baggageField = BaggageField.create(baggageKey);
        baggageField.updateValue(baggageValue);
    

    【讨论】:

    • 谢谢。它在 2 个休息组件(弹簧靴)之间工作。因此,拦截器中不需要任何代码。但是,为什么这些字段没有传播到 Kafka(最新稳定版本:2.x)并且我们没有使用任何 spring cloud kafka 流,使用简单的 spring-kafka。我们需要更改任何配置吗?
    • 这可能是 kafka 仪器的问题。您能否提交一个问题,最好是复制您的问题的样本?
    • 正是这个答案为我提供了 解决方案,经过数小时的摆弄。
    猜你喜欢
    • 2023-04-06
    • 2023-02-14
    • 2018-07-13
    • 2017-08-31
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多