【问题标题】:Multiple routes from same origin in Camel骆驼中来自同一来源的多条路线
【发布时间】:2014-02-12 06:11:53
【问题描述】:

我有一个包含多个消费者的 JMS 队列。我正在尝试跟随骆驼路线,

<camel:camelContext id="camel-server">
        <camel:package>com.camlin.consumer</camel:package>

        <camel:route id="one">
            <camel:from uri="jms:queue:request" />
            <camel:choice>
                <camel:when>
                    <camel:simple>${header.type} == '1'</camel:simple>
                    <camel:to uri="bean:consumerBean?method=receive1" />
                </camel:when>
            </camel:choice>
        </camel:route>

        <camel:route id="two">
            <camel:from uri="jms:queue:request" />
            <camel:choice>
                <camel:when>
                    <camel:simple>${header.type} == '2'</camel:simple>
                    <camel:to uri="bean:consumerBean?method=receive2" />
                </camel:when>
            </camel:choice>
        </camel:route>

    </camel:camelContext>

消息发送为,

producer.sendBodyAndHeader("Hello from Producer-1", "type", "1");
producer.sendBodyAndHeader("Hello from Producer-2", "type", "2");

仅使用第一条消息。根据路由,第二条消息永远不会到达 consumerBean。 第一季度。此处是否缺少任何配置?

我想要多条路线,因为我需要动态添加/删除路线。所以这里不适合单条路线多选。

第二季度。当骆驼通过标头检查消息时是否将其从队列中删除?以致于其他路线无法使用? 更新:请参阅http://fusesource.com/docs/router/2.5/eip/MsgEnd-Selective.html。过滤器通过使用消息来工作。所以选择器是唯一的选择。

【问题讨论】:

    标签: spring jakarta-ee apache-camel hornetq


    【解决方案1】:

    如果您希望您的所有路由(消费者)接收所有消息,那么您需要订阅一个主题。队列上的消息只能被消费一次。一个主题的消息被传递给所有订阅的消费者。

    如果你想使用队列,你可以使用 JMS 选择器。但是,选择器是一个端点选项,您没有在代码 sn-p 中设置。

    【讨论】:

    • 不能与带有过滤器的队列一起使用吗?当我尝试使用两个 Camel 上下文时,消息正确传递。
    • 可能。我个人从未使用过过滤器。无论如何,选择器是 JMS 组件的连接属性。在您的示例中,您没有设置任何选择器。
    • 我将此标记为答案,因为您对 JMS 选择器的建议有效。 JMS 选择器参考pretechsol.com/2013/11/…
    • @jaks 我已经根据您对选择器的反馈更新了答案。
    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多