いくつかのルートを作成しました。以下は、問題が発生しているコードです。予想される動作は次のとおりです。
- Exchange はまず hourlyFeedParts キューで処理され、その後、dailyProcessor に渡されます。
- DailyProcessor では、プロパティ currHour が 23 であるかどうかがチェックされています。そうでなければ、それはただ受け継がれます。
の場合
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()