Компонент Apache Camel JMS / AMQP создает очередь назначения только при необходимости - PullRequest
0 голосов
/ 12 февраля 2019

В настоящее время я работаю над приложением Integration, которое использует Camel с Spring Boot.В приложении интеграции есть верблюжий маршрут, который получает сообщения от исходного брокера Artemis, который преобразуется и отправляется другому брокеру Artemis.Маршрут верблюда выглядит следующим образом:

from(sourceQueue).process(transformProcessor).to(destinationQueue)

Когда маршрут верблюда начинается, он воссоздает имена очереди, упомянутые в полях from и to, а предыдущие сообщения теряются.Мы не ожидаем, что это произойдет.

Один из способов, которые я нашел, это сделать в Artemis ActiveMQ broker.xml, отключить автоматическое создание очередей и тем и создать очереди с помощью API Artemis.

Мой вопрос: можем ли мы сконфигурировать компонент Camel JMS / AMQP для создания очереди только в том случае, если ее нет, и, если она присутствует, использовать существующие?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Я не знаю Артемида , но брокеру кажется странным удалить очередь со своими сообщениями.По крайней мере, его «брат» ActiveMQ по умолчанию имеет ожидаемое поведение: очереди создаются автоматически, если они не существуют, но они просто остаются, если они уже существуют.

Вы уверены, что очереди воссоздаются при запуске маршрута?Эти очереди постоянны?Может ли быть так, что потребитель просто истощает очередь?Я также нашел атрибут очереди Artemis с именем auto-delete-queues, который удалял бы очередь, если она была истощена потребителем.

auto-delete-queues Независимо от того, должен ли брокер автоматически удалять автоматически созданные очереди JMS, когда у них есть как 0 получателей, так и 0 сообщений.

0 голосов
/ 13 февраля 2019

По умолчанию Camel будет использовать DynamicDestinationResolver .Вы можете создать свой собственный DestinationResolver и подключить его к своей конечной точке (или к компоненту)

.to("jms:queue:myQueue?destinationResolver=MyCustomDestinationResolver");

Вы также можете использовать JndiDestinationResolver , который по умолчанию не отступает при создании динамического назначения .

...