给骆驼路线添加延迟会导致Atomikos超时

时间:2020-01-10 11:59:47

标签: java apache-camel activemq atomikos

我有一个侦听ActiveMQ的骆驼路线。我添加了10秒的延迟时间,因为它需要确保在开始之前另一个进程已经完成。这可以通过添加delayer属性来实现:-

<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 !

对于如何解决此问题,我将不胜感激。理想情况下,我想增加该路由的超时时间。非常感谢

1 个答案:

答案 0 :(得分:2)

正如@ sergei-petunin所说,您尝试通过等待来补偿设计问题

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

  1. 您等待的事物会收到一条消息并执行其操作
  2. 然后它向您的路线发送一条消息
  3. 然后您的路线无需等待即可处理消息

因此,该过程的所有部分步骤都是异步执行的,顺序执行是因为它们相互依赖。这也称为Pipes and Filters EIP

如果您可以控制等待的事物,则可以通过在等待的事物和路线之间放置消息队列来轻松更改设计。