是否有关于Camel的while循环的想法? 我们使用Camel进行批处理(实际上并不是我所知道的ESB的职权范围)。我想在ESB中处理消息时继续检查其他内容的状态。我只能找到一个循环定义次数的循环,即用于测试或每隔x秒检查一次的石英定时器。这些都不合适。
有任何建议,还是我只是在ESB的职权范围之外提出要求?
答案 0 :(得分:2)
做这样的事情怎么样:
<camelContext id="myContext">
<route id ="initializer">
<!--This will be created only once -->
<from uri="timer://foo?repeatCount=1"/>
<to uri="seda:mySedaQueue"/>
</route>
<route id ="myRoute">
<from uri="seda:mySedaQueue"/>
<choice>
<when>
<simple>{your condition if you want to continue}</simple>
...
<to uri="seda:mySedaQueue" />
</when>
<otherwise>
...
</otherwise>
</choice>
</route>
</camelContext>
答案 1 :(得分:1)
骆驼timer:
怎么样?
E.g。
from("timer://foo?fixedRate=true&period=1000")
.to("bean:myBean?method=someMethodName");
答案 2 :(得分:1)
尝试使用DynamicRouter。
它使用Expression类来确定分派交换的下一个路由。如果表达式返回null,则表示它将停止路由。
通过这种方式,您可以评估交换内容并继续路由到同一路由,直到您决定停止为止,然后返回null。
from("direct:start")
.dynamicRouter(new Expression() {
@Override
public <T> T evaluate(Exchange exchange, Class<T> type) {
if (<your condition>) return (T) "direct:whileRoute";
return null;
}
})
.to("mock:finish");
from("direct:whileRoute")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
// Do whatever you want
}
});