我创建了一些路线。以下是有问题的代码。 以下是预期的行为:
如果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()
答案 0 :(得分: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");
我没有测试过,但我想你明白了。