4

寻找一个显示将 spring cloud sleuth 与 spring boot amqp (rabbit) 发布者和订阅者集成的示例。

我确实在日志中看到以下消息

2016-10-21 08:35:15.708 INFO [producer,9148f56490e5742f,943ed050691842ab,false] 30928 --- [nio-8080-exec-1] abccontrollers.MessagingController:收到请求以 Activity OrderShipped 2016-10-21 08 发布:35:15.730 INFO [producer,9148f56490e5742f,943ed050691842ab,false] 30928 --- [nio-8080-exec-1] abcservice.ProducerService:消息已发布

当我查看 Queue 上的消息时,我没有看到 traceId 或添加到标题的任何其他详细信息。我应该使用 MessagePostProcessor 将这些添加到标题中吗?

另外在接收服务上应该做什么?

4

2 回答 2

2

我们不会开箱即用地检测 Spring AMQP。但是,您可以使用我们支持的 Spring Integration 或 Spring Cloud Stream,然后一切都会开箱即用。如果您出于某种原因需要使用 Spring AMQP,则必须自己检测代码(并向我们发送 PR ;))。

于 2016-10-21T13:55:25.930 回答
2

使用 Spring AMQP,您可以使用setBeforePublishPostProcessors方法MessagePostProcessor进行设置。RabbitTemplate

我们以这种方式实现org.springframework.amqp.core.MessagePostProcessor并覆盖了postProcessMessage该方法:

@Override
public org.springframework.amqp.core.Message postProcessMessage(org.springframework.amqp.core.Message message)
        throws AmqpException {
    MessagingMessageConverter converter = new MessagingMessageConverter();
    MessageBuilder<?> mb = MessageBuilder.fromMessage((Message<?>) converter.fromMessage(message));
    inject(tracer.getCurrentSpan(), mb);
    return converter.toMessage(mb.build(), message.getMessageProperties());
}

inject方法现在可以在消息上设置所有必需的标头,并将其与更改一起传递给 rabbitMq。
你有一个很好的例子来说明如何injectorg.springframework.cloud.sleuth.instrument.messaging.MessagingSpanInjector

我们使用的是 spring-cloud-sleuth-stream 的 v1.1.1,所以我的示例基于这个版本,在下一个版本(1.2)中会更容易。

于 2017-02-05T15:16:49.803 回答