0

私はキャメルに少し慣れていないので、これがばかげた質問である場合はご容赦ください!

Camel では、キューに対して競合するコンシューマーのリストがありますqueue-1。各コンシューマーがキューの読み取りを試みるまで 1 時間待機するようにしたいのですが、1 時間が経過したら、各コンシューマーはメッセージを受信するまで継続的にポーリングする必要があります。メッセージを受信したら、それを処理し、1 時間待ってから別の読み取りを試行します。

設定したルートは次のとおりです。

from("aws-sqs://queue-1?accessKey=ABC&secretKey=XYZ&maxMessagesPerPoll=1")
    .unmarshal().base64()
    .unmarshal().serialization()
    .throttle(1)
    .timePeriodMillis(TimeUnit.HOUR.toMillis(1))
    .bean(new ProcessorBean())
    .marshal().serialization()
    .marshal().base64()
    .to("aws-sqs://queue-2?accessKey=ABC&secretKey=XYZ");      

ルートが同期的に実行されることを理解しています (ただし、非同期的に動作するように設計された特定のコンポーネントは例外です)。その理解に基づいて、このルートはそれらの要件を満たしていると思います。

これは私が望むことをしますか?なぜですか、そうでないのですか?

4

1 に答える 1

2

ルートはキュー内のメッセージを消費し、1 時間待機します。

1 時間待ってからメッセージを読みたい場合は、ScheduledPollConsumer オプション(ドキュメント)を参照してください。一部のオプションでは、 Quartz2や Spring ベースのスケジューラ などのスケジューラを使用できます。

確認したい場合は、 logコンポーネントを使用してください.to("log:com.mycompany.order?level=DEBUG")

于 2013-10-21T08:59:39.907 に答える