web-dev-qa-db-ja.com

SQSキューが空かどうかを確認する効率的な方法

私はSQS Queue複数のホストがメッセージを読み取る場所。キュー内のすべてのメッセージが処理された後、いくつかのジョブ(ビジネスロジック)を実行したいと思います。

キューが空であることを確認するにはどうすればよいですか?

はい、ApproximateNumberOfMessagesおよびApproximateNumberOfMessagesNotVisibleキュー属性を確認できますが、これらは概数です。メッセージが残っていないときにホストがキュー内のメッセージをポーリングするのを停止してから、必要なジョブを実行したいと思います。

何か案は?ありがとう

11
rightCoder

ポーリング中に、API応答からの空の受信に注意するだけで済みます。 CloudWatchに関しては、これにより適した別のメトリックがあります。 ドキュメント から:

NumberOfEmptyReceives

メッセージを返さなかったReceiveMessageAPI呼び出しの数。

単位:カウント

有効な統計:平均、最小、最大、合計、データサンプル(Amazon SQSコンソールにサンプルカウントとして表示されます)

いくつかの追加情報:

  • このメトリックは、5分ごとにのみ入力されます。このメトリックに基づいてアラームを設定した場合、これは最小期間が5分であることを意味します。
  • Sumは、ユースケースにとって最も賢明な統計です。 NumberOfEmptyReceives> 0の場合、ポーリングジョブはキューをチェックし、メッセージを受信しませんでした。

私は個人的にこのメトリックスを使用して、NumberOfEmptyReceives> 0の合計が数期間連続した後、ポーリングジョブをホストする自動スケーリンググループをスケールダウンするクラウドウォッチアラームを設定しました。キューが空であるだけでなく、空のままであることがより明確になるため、連続した期間を実行するのが好きです。

5
Anthony Neace

キューの深さに関連するクラウドウォッチメトリックでポストビジネスロジックをトリガーできます。深さが0の場合、SNS通知を送信するか、ラムダ関数を開始できます。

また、これはsqsサービスによって報告される実際のメッセージ数であるため、このクラウドウォッチメトリックは他のメトリックよりも優れています。

1
Rohit