#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:
Сообщение журнала (отсутствуют»имя файла», «Тег 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. Я думаю, мы можем, так как проблема с заголовком теперь решена после поиска набора совместимых версий. Хотя основная часть сообщений теперь стирается Сыщиком, но я задам отдельный вопрос об этом.