【问题标题】:Two-way Apache Camel Routes - Infinite loop双向 Apache Camel 路线 - 无限循环
【发布时间】:2018-08-16 17:23:42
【问题描述】:

我有 2 个端点,我想在它们之间建立路由。由于这些端点(JMS 主题)的性质,我希望桥接是双向的。

Tibco 端点的底层 JmsComponent 启用了 pubSubNoLocal 参数,以确保消费者不会收到它自己根据http://camel.apache.org/jms.html 发送的消息

pubSubNoLocal 错误 指定是否禁止传递由它自己的连接发布的消息。

但这没有任何效果,因为 2 条路由创建了到 JMS 主题 my.topic 的单独连接。

因此,以下将创建一个无限循环。 如前所述,为了“无缝集成”,我需要双向操作的路线

<c:route>
            <c:from uri="tibco:topic:my.topic"/>
            <c:to uri="solace-jms:topic:mytopic" />
</c:route>
<c:route>
            <c:from uri="solace-jms:topic:mytopic"/>
            <c:to uri="tibco:topic:my.topic" />
</c:route>

【问题讨论】:

    标签: apache apache-camel jms tibco-ems solace


    【解决方案1】:

    我建议考虑message selectors and headers 的概念。

    在我看来,你做了两件事:

    • 使用您的服务器 ID 添加一个“PRODUCER”标头(无论您如何定义)
    • 您的所有侦听器都必须配置为 negative selector "NOT (PRODUCER='YOUR_ID')"

    完成了吗?

    (当然,您也可以使用 2 个主题...但我认为这是不可能的...)

    【讨论】:

      【解决方案2】:

      您需要在消息中添加一些指示,表明它已通过任一网桥发送。您可以使用现有属性(重新交付?)或更好地添加新属性。例如,当它通过您的网桥时设置属性 bridged=true。然后在您的定义中,您可以过滤掉已桥接的每条消息。

      【讨论】:

        猜你喜欢
        • 2014-12-04
        • 2013-01-05
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 2018-10-11
        • 2011-11-24
        • 1970-01-01
        • 2017-11-24
        相关资源
        最近更新 更多