我有一个监听 ActiveMQ 的 Camel 路由。我添加了 10 秒的延迟,因为在开始之前需要确定另一个进程已完成。这是通过添加延迟器属性来实现的:-
<camel:route id="packageRetrievalContentAndSendToS3" delayer="10000">
<camel:from uri="activemq:{{ccs.activemq.queue.prefix}}.sr.package.and.send"/>
....extra steps....
</camel:route>
这工作正常,但问题是,我的路线现在超时了!下面留言。
Atomikos:8] c.a.icatch.imp.ActiveStateHandler : Timeout/setRollbackOnly of ACTIVE coordinator !
我非常感谢任何关于如何解决这个问题的建议。理想情况下,我想增加该路线的超时。非常感谢
最佳答案
正如@sergei-petunin 已经评论的那样,您尝试通过等待来补偿设计问题。
您的路线在您等待的事情完成之前不应收到消息。这意味着
- 您等待的事物会收到消息并执行其必须执行的操作
- 然后它会向您的路线发送一条消息
- 然后您的路由无需等待即可处理消息
因此,该过程的所有部分步骤都是异步且顺序完成的,因为它们相互依赖。这也称为 Pipes and Filters EIP .
如果您可以控制等待的事物,则可以通过在等待的事物和路线之间放置消息队列来轻松更改设计。
关于java - 向 Camel 路由添加延迟会导致 Atomikos 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59681259/