当我从基于通配符的主题阅读时,我有一个场景:
<route id="ReadMQ">
<from uri="jmsep://topic:sys/*/test/request" />
但我需要根据原始输入主题名称重新路由回复,比如在sys/5/test/request
上发布的人,我应该在sys/5/test/response
上发送回复,以便我有两个请求和响应的不同主题。如您所见,我使用spring DSL配置我的路由,我不知道如何动态配置<to uri=...
部分。
如果您有任何线索,请告诉我。谢谢!
答案 0 :(得分:0)
我也在努力解决类似问题并使用simple使其工作。
请注意,jmsep://
似乎不正确。至少你应该删除像jmsep:
这样的斜杠。至少应定义jmsep
。无论如何,在下面的示例中,我假设您使用的是jms
和主题。如果不是这种情况,则该示例将不起作用。此外,someWhere
和someWhereElse
应更改为正确的。
无论如何,至关重要。首先,让我们检查基本路由是否正在使用日志记录:
<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中选择另一种语言。
希望这会有所帮助(虽然我怀疑它会起作用)。