如何使用Endpoint类为不同的选择器创建多个JmsQueueEndpoint对象

时间:2017-09-06 20:33:16

标签: apache-camel jms activemq

我有一个队列,我想处理所选消息,并且能够使用Java DSL实现它,如下所示:

from("amq:queue:{{jms.miscQueue}}?transacted=false&selector=DSBSelectorID %3D '" + SELECTOR_ID_TRANSACTION_A2A + "'")

from("amq:queue:{{jms.miscQueue}}?transacted=false&selector=DSBSelectorID %3D '" + SELECTOR_ID_TRANSACTION_A2P + "'")

现在我想通过创建如下的JMS端点来实现相同的目标(实际上Java DSL工作正常,但随着越来越多的选项嵌入到URI中,随着时间的推移难以调试):

 JmsQueueEndpoint activeMQEndpointA2A = endpoint("amq:queue:{{jms.miscQueue}}", JmsQueueEndpoint.class);
 activeMQEndpointA2A.setTransacted(false);
 activeMQEndpointA2A.setSelector("DSBSelectorID %3D 'Route-Transaction-A2A'");


 JmsQueueEndpoint activeMQEndpointA2P = endpoint("amq:queue:{{jms.miscQueue}}", JmsQueueEndpoint.class);
 activeMQEndpointA2P.setTransacted(false);
 activeMQEndpointA2P.setSelector("DSBSelectorID %3D 'Route-Transaction-A2P'");

当我在Camel Routes中使用activeMQEndpointA2A和activeMQEndpointA2P时,它仅适用于第一个端点,第二个端点无法连接到队列并且不断抛出错误,如下所示

  

JMS消息侦听器调用程序的设置失败   'io.az.jms' - 试图恢复。原因:DSBSelectorID%3D   '路由的事务的A2P'

有人可以建议是否可以通过Java Endpoint实现吗?此外,如果我有多个路由,并且在端点URI上有多个选项要定义,建议的方法是什么?

1 个答案:

答案 0 :(得分:1)

您无法执行此操作,获取端点然后改变其属性,然后再次获取端点(您获得与第一个相同的实例),例如A2A和A2P是相同的端点实例。

您需要使用唯一的端点,因此选择器应该在uri