メッセージがAWS SQSキューに配置され、Camel AWSが消費する実装があります。 concurrentConsumers = 1を使用しています。org.apache.camel.component.aws.sqs.SqsConsumerのように、キューのポーリングを記録しています。Apache CamelがSQSから適時にメッセージを取得しない
このテストでは、(リモートシステムから)SQSにメッセージを送信してから、そのメッセージがキューに記録されている時間を記録します。 Camelの終わりでは、SqsConsumerクラスのトレースログがあり、キューがいつポーリングされ、メッセージが消費されたかがわかります。
10秒ごとにメッセージをキューに入れた場合、ほとんどの場合、Camelはメッセージを1〜2秒で受信します。しかし、それにはかなりの時間がかかります(10秒以上)。
基本的に私たちは、この動作を参照してください。
- SQS
- 上(リモート)場所メッセージ(キャメル)投票
- (キャメル)
- (キャメル)投票
- をポーリング... (多くの世論調査では、デフォルトで500ミリ秒離れています)
- (Camel)SQSからのメッセージを受け取ります
Camelを使用せずにSQSをエンドツーエンドでテストしました。スループットに問題はありません(数秒で1000メッセージ)。
このテスト用のCamelの実装は、SQSキューからの読み取りとログのみで構成されています。他の機能はありません。
他の多くのCamel SQSパラメータを変更して、動作に違いはなくテストしました。
たとえば、concurrentConsumers = 10でテストすると、すべてのメッセージが遅延から最小限度でほぼ即座にキューから取得されます。
なぜ私の質問は、単一の消費者がタイムリーにメッセージを受け取るのではないのですか? 500ミリ秒ごとに本当にポーリングを行っている場合、メッセージを「見て」、ピックアップしていないのはどうですか?
注 - 私たちは、アプリケーションの機能のためにconcurrentConsumersを使用して提供されるマルチスレッドを可能にすることを躊躇しています。
あなたは長いポーリングを試みましたか? –
@ketanvijayvargiyaはい、その動作は同じようです。 –