【问题标题】:How to create multiple JmsQueueEndpoint object for different selector using Endpoint class如何使用 Endpoint 类为不同的选择器创建多个 Jms Queue Endpoint 对象
【发布时间】:2018-02-15 10:57:01
【问题描述】:

我有一个队列,我想在其中处理选定的消息,并且能够使用 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 'Route-Transaction-A2P'

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

【问题讨论】:

  • 您是否将这些端点添加到context

标签: apache-camel jms activemq


【解决方案1】:

你不能这样做,获取一个端点然后改变它的属性,然后再次获取端点(你得到与第一个相同的实例)例如 A2A 和 A2P 是同一个端点实例。

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

【讨论】:

    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多