我正在尝试创建一个Apache Camel路由,该路由向主题发送jms消息,如果在一定时间内没有收到回复,则使用Spring DSL启动路由。
我遇到的问题是看起来foTopic调用是异步的。我希望它阻止并等待消息或直到达到超时,但它将消息发送到主题并运行到下一个处理器。发生超时时,它会再次调用处理器。我对jms组件的期望是错误的还是我的配置不正确?
注意:我正在使用骆驼2.3.0罐。
<endpoint id="foTopic"
uri="jms:topic:${jms.fotopic.topicName}?pubSubNoLocal=true&requestTimeout=5000"/>
<route id="foMasterRegistration" startupOrder="10">
<!-- Fire this route once on startup. -->
<from uri="timer:foStartTimer?period=0"/>
<to uri="foPreProcessor"/>
<doTry>
<setExchangePattern pattern="InOut"/>
<to uri="foTopic"/>
<to uri="foProcessor"/>
<doCatch>
<exception>java.util.concurrent.TimeoutException</exception>
<exception>org.apache.camel.ExchangeTimedOutException</exception>
<to uri="foProcessor"/>
</doCatch>
</doTry>
</route>
答案 0 :(得分:0)
这是我的错误配置。它确实同步运作。我最初把doCatch标签放在错误的位置,导致日志中出现奇怪的消息流(导致我首先发布这个问题)。