春季侦探行李传播不起作用

Posted

技术标签:

【中文标题】春季侦探行李传播不起作用【英文标题】:spring sleuth baggage propagation not working 【发布时间】:2021-03-20 08:04:27 【问题描述】:

我第一次使用 Sleuth 需要一些帮助。我目前正在使用侦探 2.2.3.RELEASE。 我的要求是我想传播 2 个字段产品 id 和产品类型,以便我可以从其他微服务中读取这两个值,因为我正在使用行李传播。

1. In one of the microservice in rest API my code is something like this,
BaggageField PRODUCT_ID = BaggageField.create("x-df-product-id");
PRODUCT_ID.updateValue(productId); // I have value of productId that value I want to propogate

BaggageField PRODUCT_TYPE = BaggageField.create("x-df-product-type");
PRODUCT_TYPE.updateValue(productType); // I have value of productType that value I want to propogate

Tracing.newBuilder().propagationFactory(
            BaggagePropagation.newFactoryBuilder(B3Propagation.FACTORY)
            .add(SingleBaggageField.remote(PRODUCT_ID))
            .add(SingleBaggageField.remote(PRODUCT_TYPE))
            .build());

In another microservice, I am reading the values like this:

String baggageProductId=BaggageField.getAllValues().entrySet().stream.filter(e ->"PRODUCT_ID".equalIgnoreCase(e.getKey())).map(Map.Entry::getValue).findFirst().orElse(null);

String baggageProducType=BaggageField.getAllValues().entrySet().stream.filter(e ->"PRODUCT_TYPE".equalIgnoreCase(e.getKey())).map(Map.Entry::getValue).findFirst().orElse(null);

in application.yml these are the entries:
sleuth:
 baggage:
   remoteFields:
    -x-df-product-id
    -x-df-product-type

but I am getting both values baggageProductId and baggageProducType as null.

I am not using span anywhere is that a problem? not sure how can I read these values. can you please help me?

【问题讨论】:

【参考方案1】:

更新: 我像这样更新了我的代码,它工作正常,但是......需要一些帮助。

    application.yml 更改为

侦探: 行李: 行李钥匙:

-x-df-product-id

-x-df-product-type

log.slf4.whitelisted-mdc-keys:

-x-df-product-id

-x-df-product-type

2.在 Microservice-1 中我有以下代码

BaggageField baggageFieldProductId = BaggageField.getByName("x-df-product-id"); baggageFieldProductId.getValue();

BaggageField baggageFieldProductType = BaggageField.getByName("x-df-product-type"); baggageProductType=baggageFieldProductType.getValue();

我在每个微服务的每个 application.yml 文件中插入了相同的条目。 之后,我可以在微服务 1、微服务 2、微服务 3 中检索这些值 但在微服务 4 中获得空值。不知道为什么?代码检索的逻辑到处都是一样的。

唯一的区别是我的微服务 1,2,3 spring boot 版本是 2.2.8 而微服务 4 spring boot 版本是 2.3.6。

需要帮助。真的不知道为什么我得到空值。谢谢!!!

【讨论】:

【参考方案2】:

你必须在你applicaiton.properties进行配置

spring.sleuth.propagation-keys[0]= x-df-product-id
spring.sleuth.propagation.tag.whitelisted-keys[0]=x-df-product-id
spring.sleuth.log.slf4j.whitelisted-mdc-keys[0]= x-df-product-id

此源代码 org.springframework.cloud.sleuth.autoconfig.TraceBaggageConfiguration

【讨论】:

以上是关于春季侦探行李传播不起作用的主要内容,如果未能解决你的问题,请参考以下文章

春季启动@Transactional 不起作用

春季数据 findByStartDateBetween 不起作用

春季启动验证不起作用

春季安全+休息不起作用

春季安全并发会话不起作用

春季安全。授权在jsp上不起作用