Camel - 使用通配符时解析ActiveMQ主题名称

时间:2015-12-24 17:45:02

标签: spring apache uri activemq dsl

当我从基于通配符的主题阅读时,我有一个场景:

    <route id="ReadMQ">
        <from uri="jmsep://topic:sys/*/test/request" />

但我需要根据原始输入主题名称重新路由回复,比如在sys/5/test/request上发布的人,我应该在sys/5/test/response上发送回复,以便我有两个请求和响应的不同主题。如您所见,我使用spring DSL配置我的路由,我不知道如何动态配置<to uri=...部分。 如果您有任何线索,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

我也在努力解决类似问题并使用simple使其工作。

请注意,jmsep://似乎不正确。至少你应该删除像jmsep:这样的斜杠。至少应定义jmsep。无论如何,在下面的示例中,我假设您使用的是jms和主题。如果不是这种情况,则该示例将不起作用。此外,someWheresomeWhereElse应更改为正确的。

无论如何,至关重要。首先,让我们检查基本路由是否正在使用日志记录:

<route id="ReadMQ">
    <from uri="someWhere:topic:sys/*/test/request" />
    <log loggingLevel="INFO" message="Received message with topic: ${header.JMSDestination.topicName}"/>
</route>

sys/5/test/request发送消息,您应该可以在${ACTIVEMQ_DIR}/data/activemq.log中看到如下条目:Received message with topic: sys/5/test/request

从这里开始,您应该选择一个适合您需求的enterprise integration pattern

也许你可以逃脱以下事情,但我还没有测试过它:

<route id="ReadMQ">
    <from uri="someWhere:topic:sys/*/test/request" />
    <to uri="someWhereElse:topic:${header.JMSDestination.topicName.replace("request", "response")}"/>
</route>

这又使用简单,但您可以从camel.apache.org/languages.html中选择另一种语言。

希望这会有所帮助(虽然我怀疑它会起作用)。