У нас есть стек приложений, развернутый в Tomcat, который состоит из нескольких приложений Spring Boot. В рамках наших операций мы хотим отправить некоторые сообщения в конечную точку vm, где верблюжий маршрут будет принимать эти сообщения, а затем публиковать sh их в JMS topi c для любого другого интересующего приложения Spring Boot. в сообщениях на этом topi c.
Когда я запускаю стек приложений, есть три приложения для весенней загрузки, которые используют верблюда, и я вижу, что верблюд запускается правильно в журналах. Но когда одно из приложений отправляет сообщение в конечную точку vm, маршрут, который потребляет от этой конечной точки и направляет сообщения на jms topi c, похоже, не получает это сообщение. Я поместил банку camel-core
в свой каталог lib tomcat. В конфигурации плагина весенней загрузки maven я указал исключение jar-файла camel-core. Как ни странно, эта банка все равно попала в число WEB-INF/lib
войны! Итак, я остановил Tomcat, удалил эту банку из разорванной войны и перезапустил Tomcat, но это не меняет поведения обмена сообщениями.
Вот версии, которые мы используем:
- Spring Boot 2.3.1
- Camel 3.4.2
- Tomcat 8.5.5
Первое приложение для весенней загрузки, которое связывает все вместе с верблюдом route, который потребляет от конечной точки vm и создает это сообщение на jms topi c, является нашим «механизмом маршрутизации». Он использует camel-spring-boot-starter
, spring-boot-starter-artemis
, camel-vm-starter
, artemis-jms-server
и camel-jms-starter
. Его метод настройки RouteBuilder
выглядит следующим образом:
from("vm:task")
.log(LoggingLevel.WARN, "********** Received task message");
.to("jms:topic:local.private.task")
.routeId("taskToJms");
Приложение, которое создает сообщения для конечной точки vm, использует camel-spring-boot-starter
и camel-vm-starter
. В этом приложении у него есть класс @Service
, который получает ProducerTemplate
, который автоматически подключается в конструкторе. Когда приложение вызывает этот компонент для отправки сообщения, я вижу строку в журналах, в которой написано
o.a.c.impl.engine.DefaultProducerCache (169) - >>>> vm://task Exchange[]
, поэтому кажется, что сообщение создается и отправляется правильно в конечную точку vm. Однако я не вижу никаких указаний на то, что оно было получено / использовано в верблюжьем маршруте механизма маршрутизации, поскольку в строке журнала маршрута ничего не регистрируется, и поскольку я не вижу других признаков получения сообщения в журнале. Странно то, что я не получаю сообщение об отсутствии потребителей на конечной точке vm: task, которое я получал до того, как поместил jar-файл camel-core в каталог lib tomcat.
Я что-то делаю явно неправильно? Как я могу заставить плагин весенней загрузки maven действительно исключить camel-core? И почему сообщения (отправленные в конечную точку vm) не используются маршрутом в механизме маршрутизации? Заранее благодарим за любую помощь.
Изменить: мне удалось уберечь ядро верблюда от файлов войны, добавив исключение в конфигурацию плагина войны, но я все еще не мог принять сообщение на конечной точке vm.