基于按需/触发的骆驼路线

时间:2018-06-04 22:20:33

标签: java spring apache-camel jms activemq

我正在尝试使用camel路由实现以下JMS消息流: 在外部消息代理上发布了一个主题。我的程序正在侦听有关此主题的消息。每个传入的消息都会触发要执行的特定路由 - 仅限一次(某种特定的,一次性路由)。该路由应该基于某个选择器在我的内部消息代理中的队列之间移动消息(从队列A获取与给定选择器匹配的所有消息并将它们移动到队列B)。我只是从骆驼开始到目前为止我只想到第一部分 - 听取关于主题的消息:

<bean id="somebroker" class="org.apache.camel.component.jms.JmsComponent"
    p:connectionFactory-ref="rmAdvisoriesConnectionFactory"/>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <endpoint id="jms" uri="somebroker:topic:sometopic"/>
    <route id="routeAdvisories">
        <from ref="jms"/>
        <to>???</to>
    </route>
</camelContext>

您能为这些咨询消息建议目的地吗?我需要读取它们的一些JMS属性并使用这些值来构造将用于“移动消息”操作的JMS选择器。但我不知道如何声明和触发这个临时路线。如果我只使用Spring DSL在同一个camelContext中定义它,那将是理想的选择。或者,我可以将建议路由到某个java方法,该方法将创建并执行此ad-hoc路由。但如果这是不可能的,我将不胜感激任何建议。 感谢。

2 个答案:

答案 0 :(得分:0)

据我了解,使用&#39;选择器&#39;选项,在您的JMS使用者路径中,例如:

from("activemq:queue:test?selector=key='value1'").to("mock:a");
from("activemq:queue:test?selector=key='value2'").to("mock:b");

也许,另一个选择是基于基于内容的路由器模式实现一些路由&#34;通过&#34;选择&#34;选项。您可以在此处找到更多信息:http://camel.apache.org/content-based-router.html

我希望它有所帮助。

答案 1 :(得分:0)

我无法按照我的意图使用它,所以我不得不放弃原来的方法。而不是使用camel路由在队列之间移动消息(现在我不确定camel路由甚至打算以这种方式使用)我最终使用ManagedRegionBroker - 实现JMX操作“moveMatchingMessagesTo”的方式 - 移动匹配给定选择器的消息