向 Camel 路由添加延迟会导致 Atomikos 超时

Adding delay to Camel route causes an Atomikos timeout

我有一个监听 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 已经评论过的,您试图通过等待来补偿设计问题

您的路线在您等待的事情完成之前不应收到消息。这意味着

  1. 你等待的东西收到消息并做它必须做的事情
  2. 然后它会向您的路线发送一条消息
  3. 那么您的路由会在不等待的情况下处理消息

所以流程的所有部分步骤都是异步完成的 顺序,因为它们相互依赖。这也称为 Pipes and Filters EIP.

如果您可以控制您等待的东西,您可以通过在您等待的东西和您的路由之间放置一个消息队列来轻松更改设计。