Camel中来自同一来源的多条路线

时间:2014-01-22 09:16:19

标签: spring java-ee apache-camel hornetq

我有一个包含多个使用者的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。的 Q1。这里有任何遗漏的配置吗?

我想拥有多条路线,因为我需要动态添加/删除路由。因此,选择具有多项选择的单一路线并不合适。

Q2。当camel通过标题检查消息是否从队列中删除?那么其他路线无法使用吗? 更新:参考http://fusesource.com/docs/router/2.5/eip/MsgEnd-Selective.html。过滤器通过消费消息来工作。所以选择器只是选项。

1 个答案:

答案 0 :(得分:2)

如果您希望所有路由(消费者)都接收所有消息,那么您需要订阅主题。队列中的消息只能使用一次。有关主题的消息将发送给所有订阅的消费者。

如果要使用队列,可以使用JMS选择器。但是,选择器是一个端点选项,您尚未在代码段中设置该选项。