我有一个队列,我想处理所选消息,并且能够使用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上有多个选项要定义,建议的方法是什么?
答案 0 :(得分:1)
您无法执行此操作,获取端点然后改变其属性,然后再次获取端点(您获得与第一个相同的实例),例如A2A和A2P是相同的端点实例。
您需要使用唯一的端点,因此选择器应该在uri
中