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

问题描述 投票:0回答:2

我目前正在开发一个使用Camel和Spring Boot的Integration应用程序。集成应用程序中有一个camel路由,它接收来自Artemis代理的消息,该消息被转换并发送给另一个Artemis代理。骆驼路线看起来像这样:

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

当camel路由启动时,它会重新创建from和to中提到的队列名称,之前的消息将丢失。我们不希望这种情况发生。

我发现这样做的一种方法是在Artemis ActiveMQ broker.xml中,禁用队列和主题自动创建,并使用Artemis API创建队列。

我的问题是,我们是否可以配置camel JMS / AMQP组件来创建队列,只有当它不存在且存在时才使用现有队列?

spring-boot apache-camel jms activemq amqp
2个回答
0
投票

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

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

您也可以使用JndiDestinationResolver,默认为does not fallback into creating a dynamic destination


0
投票

我不知道Artemis但是对于经纪人删除带有消息的队列来说听起来很奇怪。至少它的“兄弟”ActiveMQ默认具有你期望的行为:如果队列不存在则会自动创建,但如果它们已经存在,它们就会保留。

你确定在路线开始时重建队列吗?这些队列是否持久存在?可能是消费者只是排队了吗?我还发现了一个名为queue attribute of Artemisauto-delete-queues,如果被消费者排出,它将删除队列。

auto-delete-queues当代理有0个消费者和0个消息时,是否应该自动删除自动创建的JMS队列。

© www.soinside.com 2019 - 2024. All rights reserved.