我目前正在开发一个集成应用程序,它使用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
组件,仅在队列不存在时才创建队列,如果存在,则使用现有的队列?
2条答案
按热度按时间bttbmeg01#
默认情况下,Camel将使用DynamicDestinationResolver。您可以创建自己的自定义DestinationResolver并将其插入端点(或组件)
您还可以使用JndiDestinationResolver,默认情况下,它不会回退到创建动态目标。
wydwbb8l2#
我不知道Artemis,但代理删除队列及其消息听起来很奇怪。至少它的“兄弟”ActiveMQ在默认情况下具有您期望的行为:如果队列不存在,则会自动创建队列,但如果队列已经存在,则会保留队列。
您确定在路由启动时重新创建队列吗?这些队列是否持久?会不会是消费者只是排干了队列?我还发现了一个名为
auto-delete-queues
的queue attribute of Artemis,如果队列被消费者耗尽,它将删除队列。auto-delete-queues
当JMS队列同时有0个消费者和0条消息时,代理是否应该自动删除自动创建的JMS队列。