提问者:小点点

骆驼路线问题


我创建了一些路线。以下是有问题的代码。以下是预期行为:

> < li>Exchange首先在hourlyFeedParts队列中进行处理,然后传递给dailyProcessor。 < li >在dailyProcessor中,正在检查属性currHour是否为23。如果没有,它只是传递。 < li>

如果< code>currHour == 23,则处理其中的代码。该部件同样具有以下功能:

  • 如果属性Feedsright不为零,则执行选择currHou==23中的所有代码。这很好。
  • 如果属性FeedsLeft为零,则处理其中的代码。其中的代码查找任何进一步的消息。如果是,它们将被发送到hotlyFeedParts。问题来了:如果有任何消息要处理,则不会执行到("Direct: hotlyFeedParts")之外的代码。不过,如果没有返回任何内容,则代码工作正常。

我想问题可能是代码结束于to。那么,还有什么选择呢?

from("direct:dailyProcessor")
  .choice()
    .when(simple("${property.currHour} == 23"))
    .choice()
      .when(simple("${property.feedsLeft} == 0"))
      .split(beanExpression(APNProcessor.class, "recheckFeeds"))
      .to("direct:hourlyFeedParts")
    .endChoice()
  .end()
  .split(beanExpression(new S3FileKeyProcessorFactory(), "setAPNS3Header"))
  .parallelProcessing()
  .id("APN Daily PreProcessor / S3 key  generator ")
  .log("Uploading file ${file:name}")
  .to("{{apn.destination}}")
  .id("APN Daily S3 > uploader")
.log("Uploaded file ${file:name} to S3")
.endChoice()
.end()

共1个答案

匿名用户

我认为问题是嵌套选择()。

尝试将内部选择提取到单独的路线,例如:

from("direct:dailyProcessor")
  .choice()
    .when(simple("${property.currHour} == 23"))
       .to("direct:inner")
  .split(beanExpression(new S3FileKeyProcessorFactory(), "setAPNS3Header"))
  .parallelProcessing()
  .id("APN Daily PreProcessor / S3 key  generator ")
  .log("Uploading file ${file:name}")
  .to("{{apn.destination}}")
  .id("APN Daily S3 > uploader")
.log("Uploaded file ${file:name} to S3");

from("direct:inner")
   .choice()
      .when(simple("${property.feedsLeft} == 0"))
      .split(beanExpression(APNProcessor.class, "recheckFeeds"))
      .to("direct:hourlyFeedParts");

我还没有测试过,但我想你明白了。