Spring Boot Apache Camel JMS/AMQP组件仅在需要时创建目标队列

uinbv5nw  于 2023-10-16  发布在  Spring
关注(0)|答案(2)|浏览(111)

我目前正在开发一个集成应用程序,它使用Camel和Sping Boot 。在集成应用程序中有一个Camel路由,它从源ActiveMQ Artemis代理接收消息,这些消息经过转换并发送到另一个ActiveMQ Artemis代理。 Camel 路线看起来是这样的:

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

当Camel路由启动时,它重新创建from和to中提到的队列名称,而之前的消息将丢失。我们不希望发生这种情况。
我发现的一种方法是在ActiveMQ Artemis broker.xml中,禁用队列和主题自动创建,并使用Artemis的管理API创建队列。
我的问题是,我们是否可以配置Camel JMS/AMQP组件,仅在队列不存在时才创建队列,如果存在,则使用现有的队列?

bttbmeg0

bttbmeg01#

默认情况下,Camel将使用DynamicDestinationResolver。您可以创建自己的自定义DestinationResolver并将其插入端点(或组件)

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

您还可以使用JndiDestinationResolver,默认情况下,它不会回退到创建动态目标。

wydwbb8l

wydwbb8l2#

我不知道Artemis,但代理删除队列及其消息听起来很奇怪。至少它的“兄弟”ActiveMQ在默认情况下具有您期望的行为:如果队列不存在,则会自动创建队列,但如果队列已经存在,则会保留队列。
您确定在路由启动时重新创建队列吗?这些队列是否持久?会不会是消费者只是排干了队列?我还发现了一个名为auto-delete-queuesqueue attribute of Artemis,如果队列被消费者耗尽,它将删除队列。
auto-delete-queues当JMS队列同时有0个消费者和0条消息时,代理是否应该自动删除自动创建的JMS队列。

相关问题