2016-10-21 4 views
4

Ищите пример, показывающий интеграцию сыщика весеннего облака с издателем и подписчиком пружинного ботинка amqp (rabbit).Интеграция весеннего облачного Sleuth с пружинным ботинком amqp

Я вижу следующие сообщения в журнале

2016-10-21 08: 35: 15,708 INFO [продюсер, 9148f56490e5742f, 943ed050691842ab, ложь] 30928 --- [NiO-8080-Exec-1] abccontrollers.MessagingController: Полученный запрос на pulish с активностью OrderShipped 2016-10-21 08: 35: 15.730 INFO [производитель, 9148f56490e5742f, 943ed050691842ab, false] 30928 --- [nio-8080-exec-1] abcservice.ProducerService : Опубликовано сообщение

Когда я просматриваю сообщения в очереди, я не вижу traceId или любые другие данные, добавленные в заголовок. Должен ли я использовать MessagePostProcessor для добавления их в заголовок?

Также, что должно быть сделано на приемной службе?

ответ

1

Мы не применяем весной AMQP из коробки. Однако вы можете использовать Spring Integration или Spring Cloud Stream, которые мы поддерживаем, и тогда все будет работать из коробки. Если вам нужно использовать Spring AMQP, по какой-то причине вам придется самому самому управлять кодом (и отправляет нам PR;)).

+0

Hi Marcin - спасибо. Я бы не прочь написать код. Есть некоторые примеры того, как интегрировать. – basu76

+0

У нас есть концепция SpanInjector и SpanExtractor. Вы можете взглянуть на те, которые используются в обмене сообщениями - https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework /cloud/sleuth/instrument/messaging/MessagingSpanInjector.java и https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org /springframework/cloud/sleuth/instrument/messaging/MessagingSpanExtractor.java. Они заботятся о возврате и передаче информации трассировки в сообщениях. –

+0

Marcin - Если я реализую свою собственную версию SpanInjector, как вызван метод инъекции? – basu76

1

Используя пружину AMQP, вы можете установить MessagePostProcessor на RabbitTemplate с использованием метода setBeforePublishPostProcessors.

Мы реализовали 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 с изменениями.
У вас есть отличный пример того, как реализовать такой метод inject в org.springframework.cloud.sleuth.instrument.messaging.MessagingSpanInjector

Мы используем v1.1.1 of spring-cloud-sleuth-stream поэтому мой пример основан на этой версии, в следующей версии (1.2) будет легче.

+0

Мы закончили тем, что делали похожие вещи. – basu76

+0

@ yuval-simhon - позаботьтесь о PR для Sleuth? :) –

Смежные вопросы