我使用与Spring AMQP集成的Spring Cloud Sleuth来在发布消息时启用traceId
。
Sleuth自动将TracingMessagePostProcessor
添加到RabbitTemplate.beforePublishPostProcessor
中,以便将跟踪头添加到传出的Rabbit消息中。
我有一个设想:我有一批对象,并希望发布它们,如下所示:
List<Object> listObj = getData(...);
for (Object o : listObj) {
rabbitTemplate.convertAndSend(exchange, routingKey, o);
}
使用消息时,所有消息都具有相同traceId
我不希望出现这种情况
我如何创建一个没有TracingMessagePostProcessor
的rabbitTemplate
bean?或者如何使我发布/使用的每个消息都有一个不同的traceId
?
我已经看过Spring Cloud侦探的文档了。我可以使用配置...
spring.sleuth.messaging.rabbit.enabled=false
...禁用此特性,但我只想为指定的rabbitTemplate
bean禁用它。
2条答案
按热度按时间knsnq2tg1#
《Open Zipkin Brave》中的逻辑是这样的:
由于它是无条件的,我建议您为
setBeforePublishPostProcessors()
方法覆盖RabbitTemplate
,并使其主体为空,或者在传播到super
之前删除TracingMessagePostProcessor
。55ooxyrt2#
我使用
RabbitTemplate.addBeforePublishPostProcessors
从消息属性头中删除头b3
来自@Artem-Bilan的第二个解决方案