Sleuth Brave headers 与 JMS 规范不兼容
Sleuth Brave headers are not compatible with JMS spec
我在 Spring 集成项目中使用 Sleuth 来跨 JMS 消息传递跟踪 header。 IBM MQ 用于 Queue 管理器。此配置在功能上运行良好。但是,所有 Brave header X-B3-*
都不兼容 JMS 规范?由于 IBM MQ 客户端库对此发出警告 -
警告消息:
JMSCC0049: The property name 'X-B3-Sampled' is not a valid Java(tm) identifier.
JMS 负载:
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}]
sleuth 中是否有更改 JMS 的 header 命名约定的选项?类似于 baggage naming convention ?希望我没有遗漏文档中的任何内容。
编辑:
添加以下日志级别配置以抑制警告异常
logging:
level:
org.springframework.integration.jms.DefaultJmsHeaderMapper: ERROR
我认为可以忽略这些警告。我们正在设置 X-B3-Sampled
和 spanSampled
headers(查看 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
https://github.com/openzipkin/brave/issues/584是勇敢者中较长的话题。 JMS很不幸。
幸运的是,我们最近将后继格式更改为 B3 "Trace Context",它不再使用连字符,因此不会让 JMS 难过。 https://github.com/w3c/distributed-tracing/tree/master/trace_context 注意:这还不是规范的实现版本,但无论如何您都可以遵循它。
我在 Spring 集成项目中使用 Sleuth 来跨 JMS 消息传递跟踪 header。 IBM MQ 用于 Queue 管理器。此配置在功能上运行良好。但是,所有 Brave header X-B3-*
都不兼容 JMS 规范?由于 IBM MQ 客户端库对此发出警告 -
警告消息:
JMSCC0049: The property name 'X-B3-Sampled' is not a valid Java(tm) identifier.
JMS 负载:
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}]
sleuth 中是否有更改 JMS 的 header 命名约定的选项?类似于 baggage naming convention ?希望我没有遗漏文档中的任何内容。
编辑: 添加以下日志级别配置以抑制警告异常
logging:
level:
org.springframework.integration.jms.DefaultJmsHeaderMapper: ERROR
我认为可以忽略这些警告。我们正在设置 X-B3-Sampled
和 spanSampled
headers(查看 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
https://github.com/openzipkin/brave/issues/584是勇敢者中较长的话题。 JMS很不幸。
幸运的是,我们最近将后继格式更改为 B3 "Trace Context",它不再使用连字符,因此不会让 JMS 难过。 https://github.com/w3c/distributed-tracing/tree/master/trace_context 注意:这还不是规范的实现版本,但无论如何您都可以遵循它。