有条件退出骆驼圈

时间:2017-05-16 19:18:07

标签: java apache-camel activemq

我首先要说的是我使用的是Camel 2.14,目前升级根本不在卡片中。所以我错过了2.17中的doWhile选项。

我有一个场景,我需要能够让路由重复尝试在服务实例准备好时传递给它。一旦成功,我需要退出循环。到目前为止,我已经能够查看指定的次数。然而,即使在成功之后,这种循环仍在继续。

我已经搜索过,似乎我没有多少选择。或者我在Camel领域仍然太新,无法识别我的选择。

fx:controller

2 个答案:

答案 0 :(得分:0)

您可以在结合了isReady和doWork方法的java bean中编写它,而不是Camel循环。如果你需要循环很长时间,那么关注循环也不是一个好主意。如果您还没准备好,最好不要从AMQ队列中消费,而是将消息留在商店中。

因此,您可以使用路由策略来控制路由以暂停/恢复,具体取决于就绪状态。

然后您可以从路由策略中定期检查isReady,然后相应地暂停/恢复路由。

http://camel.apache.org/routepolicy.html

答案 1 :(得分:0)

我遇到了类似的情况,并通过自我递归的方式解决了这个问题。我不知道这种做法是否存在一些不利因素。

<route>
  <from uri="activemq:queue:myQueue" />
  <to uri="direct:loopingRoute"/>
</route>

<route>
  <from uri="direct:loopingRoute"/>
  <choice>
    <when>
      <method ref="myService" method="isReady"/>
      <bean ref="myService" method="doWork"/>
    </when>
    <otherwise>
      <to uri="direct:loopingRoute"/>
    </otherwise>
  </choice>
</route>

<小时/> 这是我使用的配件。在回答这个问题时,我想到了一点。如果递归超出限制,是否会导致stack overflow