将 Spring Cloud Sleuth 与 Spring boot amqp 集成
Integrating Spring Cloud Sleuth with Spring boot amqp
正在寻找显示 spring 云侦探与 spring 引导 amqp(兔子)发布者和订阅者集成的示例。
我确实在日志中看到了以下消息
2016-10-21 08:35:15.708 INFO [producer,9148f56490e5742f,943ed050691842ab,false] 30928 --- [nio-8080-exec-1] a.b.c.controllers.MessagingController : 收到发布请求Activity OrderShipped
2016-10-21 08:35:15.730 INFO [producer,9148f56490e5742f,943ed050691842ab,false] 30928 --- [nio-8080-exec-1] a.b.c.service.ProducerService : 消息发布
当我查看 Queue 上的消息时,我没有看到添加到 header 的 traceId 或任何其他详细信息。我应该使用 MessagePostProcessor 将它们添加到 header?
还有接收服务应该怎么办?
我们不直接检测 Spring AMQP。但是,您可以使用我们支持的 Spring Integration 或 Spring Cloud Stream,然后一切都会开箱即用。如果您出于某种原因需要使用 Spring AMQP,您必须自己检测代码(并向我们发送 PR ;))。
使用 Spring AMQP,您可以使用 setBeforePublishPostProcessors 方法在 RabbitTemplate
上设置 MessagePostProcessor
。
我们以这种方式实现了 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
方法现在可以在消息上设置所有需要的headers,并且会随着修改传给rabbitMq
你有一个很好的例子来说明如何在 org.springframework.cloud.sleuth.instrument.messaging.MessagingSpanInjector
中实现这样的 inject
方法
我们正在使用 v1.1.1 of spring-cloud-sleuth-stream 所以我的例子是基于这个版本的,在下一个版本 (1.2) 中会更容易。
正在寻找显示 spring 云侦探与 spring 引导 amqp(兔子)发布者和订阅者集成的示例。
我确实在日志中看到了以下消息
2016-10-21 08:35:15.708 INFO [producer,9148f56490e5742f,943ed050691842ab,false] 30928 --- [nio-8080-exec-1] a.b.c.controllers.MessagingController : 收到发布请求Activity OrderShipped 2016-10-21 08:35:15.730 INFO [producer,9148f56490e5742f,943ed050691842ab,false] 30928 --- [nio-8080-exec-1] a.b.c.service.ProducerService : 消息发布
当我查看 Queue 上的消息时,我没有看到添加到 header 的 traceId 或任何其他详细信息。我应该使用 MessagePostProcessor 将它们添加到 header?
还有接收服务应该怎么办?
我们不直接检测 Spring AMQP。但是,您可以使用我们支持的 Spring Integration 或 Spring Cloud Stream,然后一切都会开箱即用。如果您出于某种原因需要使用 Spring AMQP,您必须自己检测代码(并向我们发送 PR ;))。
使用 Spring AMQP,您可以使用 setBeforePublishPostProcessors 方法在 RabbitTemplate
上设置 MessagePostProcessor
。
我们以这种方式实现了 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
方法现在可以在消息上设置所有需要的headers,并且会随着修改传给rabbitMq
你有一个很好的例子来说明如何在 org.springframework.cloud.sleuth.instrument.messaging.MessagingSpanInjector
inject
方法
我们正在使用 v1.1.1 of spring-cloud-sleuth-stream 所以我的例子是基于这个版本的,在下一个版本 (1.2) 中会更容易。