Sleuth Brave标头与JMS规范不兼容

时间:2018-03-14 03:40:11

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

我在Spring Integration项目中使用Sleuth来传递JMS消息中的跟踪头。 IBM MQ用于队列管理器。这种配置在功能上都很好。但是,所有Brave标头X-B3-*都与JMS规范不兼容?由于IBM MQ客户端lib会发出警告 -

警告讯息 JMSCC0049: The property name 'X-B3-Sampled' is not a valid Java(tm) identifier.

JMS Payload: 2018-03-13 11:54:42.919 INFO [domain-batch,d5a9e59728d0846a,954264c0e98a448b,false] 141252 --- [ask-scheduler-2] c.l.p.module.biz.BackendServiceClient : Message: GenericMessage [payload=2018-03-13T11:54:42.856, headers={JMS_IBM_Character_Set=UTF-8, jms_destination=queue:///DEV.QUEUE.1, JMS_IBM_Encoding=273, jms_timestamp=1520956482869, JMS_IBM_PutApplType=28, spanId=9a20699cdc50f7e9, JMS_IBM_Format=MQSTR , JMSXDeliveryCount=1, X-B3-Sampled=0, JMS_IBM_PutTime=15544287, X-B3-TraceId=d5a9e59728d0846a, id=d40cfbec-5dce-a8cd-0d96-da0e3d761459, jms_messageId=ID:414d5120514d3120202020202020202035a3a35aae92fa20, JMS_IBM_MsgType=8, JMSXUserID=app , X-B3-ParentSpanId=385f47b14a627448, priority=4, JMSXAppID=BackendServiceApplication , spanTraceId=d5a9e59728d0846a, spanParentSpanId=385f47b14a627448, nativeHeaders={spanTraceId=[d5a9e59728d0846a], spanId=[9a20699cdc50f7e9], spanParentSpanId=[385f47b14a627448], spanSampled=[0]}, jms_redelivered=false, JMS_IBM_PutDate=20180313, X-B3-SpanId=9a20699cdc50f7e9, spanSampled=0}]

是否有一个选项可以改变JMS的标题命名约定?与baggage naming convention类似?希望我没有遗漏文档中的内容。

修改 添加以下日志级别配置以禁止警告异常

logging:
  level:
    org.springframework.integration.jms.DefaultJmsHeaderMapper: ERROR

2 个答案:

答案 0 :(得分:1)

我认为这些警告可以忽略不计。我们正在设置X-B3-SampledspanSampled标头(请查看https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagation.java)。第一个是不兼容的,第二个是兼容JMS的

答案 1 :(得分:1)

https://github.com/openzipkin/brave/issues/584是勇敢的较长话题。 JMS很不幸。

幸运的是,我们最近将继任者的格式改为B3" Trace Context"它不再使用连字符,因此不会让JMS感到悲伤。 https://github.com/w3c/distributed-tracing/tree/master/trace_context注意:这不是规范的实施版本,但无论如何你都可以遵循它。