Spring sleuth не работает с SNS и SQS

#spring-boot #amazon-sqs #amazon-sns #distributed-tracing

Вопрос:

У меня есть два микросервиса, которые интегрированы вместе с SNS и SQS. Сообщение успешно передается между ними, но весенний сыщик генерирует новое traceId во втором. Таким образом, невозможно обеспечить сквозную видимость и отслеживание запроса.

Конфигурация сыщика в обоих приложениях (каждое приложение имеет другое имя):

 spring:
  application:
    name: BookingApp
  sleuth:
    sampler:
      probability: 1
    messaging:
      enabled: true
  zipkin:
    base-url: http://localhost:9411/
 

Код издателя:

 @Override
public void publish(Booking booking) {
    LOGGER.info("Publishing Booking:  Booking id: [{}], status [{}]",booking.getId(), booking.getBookingStatus());
    notificationMessagingTemplate.convertAndSend(booking);
}
 

Код прослушивателя:

 @SqsListener(value = "${create-booking}", deletionPolicy = ON_SUCCESS)
public void listen(@Valid @NotificationMessage ‌Booking booking) {
    LOGGER.info("Booking received:  Booking id: [{}], status [{}]",booking.getId(), booking.getBookingStatus());
    //...
}
 

Ответ №1:

Используйте приложение Wireshark, чтобы просмотреть заголовок traceId сообщения amqp на сетевом уровне. Я предполагаю, что заголовок идентификатора трассировки не будет отправлен от издателя сообщений.