如何使用Apache Camel循环do while

mspsb9vt  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(443)

我的camel路由中的loopDoWhile模式出现问题。请注意,如果没有loopDoWhile,路由将正常工作,并将一组项返回到“class1”路由。
等级1:

from(LISTE_URI)
.process(listRequestProcessor)
.to("direct:netty4-tcp-route")
.process(listResponseProcessor);

第2类:

from("direct:netty4-tcp-route")
.loopDoWhile(exchangeProperty("endOfList").isNotEqualTo("true"))
.marshal(myDataFormat)
.to(netty4URI)
.unmarshal(myDataFormat);

我正在调用的服务器返回一个部分项列表和一个“endOfList”,该“endOfList”设置为true或false取决于是否有更多项要获取。
使用“loopDoWhile”模式,我在循环,最终的列表按预期增长但是在循环结束时,列表没有返回到类1路由。没有来自类2路由的响应(虽然我有一个没有循环的路由)。

bweufnob

bweufnob1#

经过一段时间的搜索错误的方向,它似乎是由于问题的netty调用:我不得不使用enrich(netty4URI)而不是to(netty4URI)。

1hdlvixo

1hdlvixo2#

camel中的doWhile循环可以用以下方式编写:
方式1(简单)--〉字符串 predicate :

from("direct:simple")
  .loopDoWhile(simple("${body.length} <= 5"))
  .to("mock:loop")
  .transform(body().append("A"))
  .end()
  .to("mock:result");

方式2(函数式)--〉字符串 predicate :

from("direct:functional")
  .loopDoWhile()
  .body(String.class, b -> b.length() <= 5)
  .to("mock:loop")
  .transform()
  .body(String.class, b -> b += "A")
  .end()
  .to("mock:result");

方式2(功能)--〉布尔 predicate :

boolean flag = true;
 from("direct:functional")
  .loopDoWhile()
  .body(Boolean.class, b -> flag == false)
  .to("mock:loop")
  .end()
  .to("mock:result");

您可以使用上述案例来适应您的用例。

相关问题