我首先要说的是我使用的是Camel 2.14,目前升级根本不在卡片中。所以我错过了2.17中的doWhile选项。
我有一个场景,我需要能够让路由重复尝试在服务实例准备好时传递给它。一旦成功,我需要退出循环。到目前为止,我已经能够查看指定的次数。然而,即使在成功之后,这种循环仍在继续。
我已经搜索过,似乎我没有多少选择。或者我在Camel领域仍然太新,无法识别我的选择。
fx:controller
答案 0 :(得分:0)
您可以在结合了isReady和doWork方法的java bean中编写它,而不是Camel循环。如果你需要循环很长时间,那么关注循环也不是一个好主意。如果您还没准备好,最好不要从AMQ队列中消费,而是将消息留在商店中。
因此,您可以使用路由策略来控制路由以暂停/恢复,具体取决于就绪状态。
然后您可以从路由策略中定期检查isReady,然后相应地暂停/恢复路由。
答案 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
?