0

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

  1. Exchange 首先在 hourlyFeedParts 队列中处理,然后传递给 dailyProcessor。
  2. 在 dailyProcessor 中,正在检查属性 currHour 是否为 23。如果没有,它只是传递。
  3. 如果currHour == 23,则应处理其中的代码。这部分又具有以下功能,

    • 如果属性feedsleft不为零,currHour==23则执行选项中的所有代码。这可以。
    • 如果属性feedsLeft为零,则处理其中的代码。其中的代码会查找任何进一步的消息。如果是,则将它们发送到hourlyFeedParts. 问题来了:如果有任何消息要处理,to("direct:hourlyFeedParts")则不会执行超出的代码。但是,如果没有返回任何内容,则代码可以正常工作。

我想问题可能是代码以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()
4

1 回答 1

0

我认为问题在于嵌套的选择()。

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

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");

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

于 2013-11-07T15:58:11.800 回答