Spring Coud Sleuth приводит к потере заголовков сообщений ActiveMQ/JMS

#spring #apache-camel #activemq #spring-cloud #spring-cloud-sleuth

Вопрос:

Версии:

  • Пружинная загрузка: 2.3.12.РЕЛИЗ
  • Весеннее облако: Хокстон.SR12
  • Стартовый сыщик SpringCloud: 3.0.3
  • Верблюд: 3.4.6

Я хочу добавить Sleuth в уже существующий проект, который теперь использует ActiveMQ, ранее он был jusing JMS. Когда я это делаю, значения из сообщения ActiceMQ блокируются/удаляются и (одно из них — «имя файла», которое является ключевым значением для запросов S2). Другие значения JMS, похоже, все еще проходят нормально.

Мне нужно понять, почему значения, отличные от JMS, блокируются/удаляются (я не могу найти никакой информации о том, что могло бы привести к этому), чтобы предотвратить ошибки.

Я знаю, что могу отменить поиск для JMS, spring.sleuth.messaging.jms.enabled=true но, продвигаясь вперед, я хотел бы иметь возможность отслеживать код ActiveMQ/JMS, так что обходной путь не особенно привлекателен.

Поскольку это код перед выходом, я также хотел бы избежать необходимости его переписывать, если это вообще возможно.

Кто-нибудь заставил SPring Cloud Sleuth работать с ActiveMQ/JMS и, возможно, может указать, где что-то идет не так?

Редактировать:

Основываясь на первоначальном ответе Марчина, мы обнаружили, что следующая версия компилируется и выполняется, хотя значительные проблемы сохраняются:

  • Пружинный ботинок: 2.4.8
  • Весеннее облако: 2020.0.3
  • Верблюд: 3.7.5

Без Сыщика

Подробности сообщения ActiveMQ: Без Сыщика

Сообщение журнала («имя файла», «CamelAwsS3Etag» и т. Д. Присутствуют):

 2021-08-16 10:10:37.889  INFO [MyApp,,] 28775 --- [umer[taskQueue]] taskQueueConsumer: ***HEADERS IN***: {CamelAwsS3ETag=39d029a87fa4c6aaee5f1de643d9f3f6, Content-Type=application/json, filename=_bl001/group0/_bl001-group0-1629104686042.zip, JMSCorrelationID=null, JMSCorrelationIDAsBytes=null, JMSDeliveryMode=2, JMSDestination=queue://taskQueue, JMSExpiration=0, JMSMessageID=ID:server-44053-1629104652998-1:3:1:1:1, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1629104686350, JMSType=null, JMSXGroupID=_bl001-group0, JMSXGroupSeq=0, JMSXUserID=null}
 

С Сыщиком

Подробности сообщения ActiveMQ: С помощью Sleuth отображается значение quot;b3quot;

Сообщение журнала (отсутствуют»имя файла», «Тег camelawss3» и т. Д.):

 2021-08-16 10:24:33.821  INFO [MyApp,,] 31553 --- [umer[taskQueue]] taskQueueConsumer: ***HEADERS IN***: {JMSCorrelationID=null, JMSCorrelationIDAsBytes=null, JMSDeliveryMode=2, JMSDestination=queue://taskQueue, JMSExpiration=0, JMSMessageID=ID:server-42561-1629105658959-1:3:1:1:1, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1629105675306, JMSType=null, JMSXGroupID=_bl000-group1, JMSXGroupSeq=0, JMSXUserID=null}
 

Пример кода Java

 @Component
public class MyAppCoreRouter extends RouteBuilder {

    /* Other code */

    @Override
    public void configure() {
        from("activemq:queue:taskQueue?concurrentConsumers="   taskNumberOfConcurrentConsumers)
                .log("***HEADERS IN***: ${headers}")
                .routeId("taskQueueConsumer")
                .threads(taskNumberOfConcurrentConsumers)
                .pollEnrich().simple("aws-s3://myapp-task?amazonS3Client=#amazonS3Clientamp;fileName=${header.filename}amp;operation=getObject")
                .choice()
                .when(header(S3Constants.KEY).endsWith(".zip"))
                .to("file://"   taskLocalUnCompressedEndpoint   "?fileName=${header.CamelAwsS3ETag}/${header.CamelAwsS3Key}")
                .process(exchange -> {
                    String camelAwsS3ETag = exchange.getIn().getHeader("CamelAwsS3ETag", String.class);
                    String camelAwsS3Key = exchange.getIn().getHeader("CamelAwsS3Key", String.class);
                    File uniqueDir = new File(taskLocalUnCompressedEndpoint, camelAwsS3ETag);
                    File taskZip = new File(uniqueDir, camelAwsS3Key);
                    new ZipFile(taskZip).extractAll(uniqueDir.getAbsolutePath());
                })
                .setHeader("resourceDirectory", simple(taskLocalUnCompressedEndpoint   "/${header.CamelAwsS3ETag}")).setHeader("schedule.time", simple("${date:now}"))
                .removeHeader("CamelAwsS3Headers")
                .log(LoggingLevel.DEBUG, "Processing batch job ${headers}")
                .to("spring-batch:importMyAppRecordJob")
                .endChoice()
                .otherwise()
                .log(LoggingLevel.WARN, "Unexpected file type, filtering file name ${header.CamelAwsS3Key} ")
                .end();

        /* Other code */
    }
}
 

Ответ №1:

Вы используете неправильные версии Boot, Cloud и Sleuth. Чтобы использовать Sleuth 3.0.x, вам необходимо использовать Cloud 2020.0.x и загрузить 2.4.x или 2.5.x.

Комментарии:

1. Согласно документам, Хокстон подходит для Весеннего облака: docs.spring.io/spring-cloud/docs/Hoxton.SR12/reference/html Если это неверно, какие правильные версии следует использовать с выпуском версии 2.3.12 и где есть каноническое место для поиска этого? Спасибо!

2. Если вы пойдете в spring.io/projects/spring-cloud и прочтите таблицу 1, вы увидите, что для Hoxton вам нужно использовать Boot 2.2.x, 2.3.x (начиная с SR5). Версия сыщика навязывается поездом — вы не можете произвольно установить его версию. Итак, Sleuth для Хокстона-2.x. Кроме того, Хокстон больше не поддерживается, поэтому, пожалуйста, обновитесь до последней версии.

3. А-а-а-а! Похоже, у меня там было небольшое недоразумение (и я вижу, что сыщик Версон упоминался ниже по этой ссылке). К сожалению, та же проблема сохраняется и с выпуском Sleuth 2.2.8.. Я не могу обновить этот проект, переход на 2.4 или 2.5 нарушает его многими способами; вероятно, из-за других зависимостей. Но спасибо за быстрые реплики.

4. Только что предприняли попытку обновления, и во время его компиляции произошел сбой во время выполнения «Исключение в потоке «основной» java.lang. NoClassDefFoundError: org/springframework/ядро/показатели/Запуск приложений», который, по-видимому, github.com/spring-projects/spring-boot/issues/24880 Мне придется вернуться к авторам исходного кода и получить их помощь в любом обновлении. Еще раз спасибо.

5. Я думаю, мы можем, так как проблема с заголовком теперь решена после поиска набора совместимых версий. Хотя основная часть сообщений теперь стирается Сыщиком, но я задам отдельный вопрос об этом.