当前位置: 首页 > 知识库问答 >
问题:

spring sleuth行李传播未得到传播/工作

东郭弘
2023-03-14

我们目前正在使用侦探2.2.3. RELEASE,我们看不到在超文本传输协议标头中传递的字段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 

在回退中:

%X{行李用户ID:-}

我们在超文本传输协议头中传递userId。

共有1个答案

司空实
2023-03-14

请不要创建自己的跟踪实例。您可以创建最终将在跟踪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);
 类似资料:
  • 我第一次使用侦探需要一些帮助。我目前正在使用sleuth 2.2.3。释放我的要求是我想传播两个字段product id和product type,这样我就可以从其他微服务中读取这两个值,因为我正在使用baggage传播。

  • 我有一个过滤器(OncePerRequestFilter),它基本上拦截传入的请求并记录traceId、spanId等。它运行良好,这个过滤器位于一个公共模块中,该模块包含在其他项目中,以避免在我的所有微服务中包含spring sleuth依赖项,这就是我将它创建为库的原因,因为对库的任何更改对所有模块都是公共的。现在,我必须添加一个新的传播密钥,它需要通过http头(如trace和spanId)

  • 我理解,随着Spring Cloud Sleuth 3.x.x的出现,您需要指定要传播到远程组件的行李头的名称,如下所示: 对于自定义标题,我认为这很好。我想知道如果行李需要转移,B3/Zipkin会是什么样子。 我记得有一次讨论B3没有指定baggage,但也有一种“约定”,即前缀为“baggage”的字段被转发。 问题1:这是正确的吗,现在仍然是这样,还是在Sleuth 3.x.x中删除了?

  • 问题内容: 使用Django 1.5.1: 如果我取消注释行,并调用一个具有的视图,则将回溯打印到控制台: 但是,如果这些行保持注释状态,则不会向控制台打印回溯信息,只是: 我以为如果未配置logger,它将传播到root logger,后者将所有内容打印到控制台。 我没有发现任何特别的信息。 为什么不起作用? 在这里我读到: 在Django 1.5之前,LOGGING设置始终会覆盖默认的Djan

  • 问题内容: 我很快就遇到了这种愚蠢的行为,在这种行为中,强制展开可选对象不会传播。 从文档中: 尝试使用!访问不存在的可选值会触发运行时错误。在使用!之前,请始终确保可选内容包含非nil值。强制释放其价值。 复制: 和 这对我来说似乎不合逻辑或前后不一,我找不到有关此主题的任何文档。 这是设计使然吗? 问题答案: 从文档中: 错误处理 错误处理是响应程序错误状态并从错误状态中恢复的过程。Swift

  • 这是我的问题: 我正在Java EE/Spring/Hibernate应用程序上运行批处理。此批处理调用方法1。该方法调用方法2,该方法可以引发用户异常(扩展RuntimeException的类)。下面是它的样子: 在继续执行时捕获异常,但在事务关闭时,method1结束时抛出回滚异常。 这是堆栈跟踪: 当method2不抛出这个异常时,它工作得很好。 我尝试过的: 设置在 尝试并抓住 但这并没有