我正在尝试创建一个向主题发送 jms 消息的 Apache Camel 路由,如果它在一定时间内没有收到回复,它将使用 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>