Amazon SQS キューからメッセージを受信できない理由を知りたいです。

所要時間1分
0

Amazon Simple Queue Service (Amazon SQS) キューに対して ReceiveMessage API コールを行いましたが、メッセージが返されませんでした。

簡単な説明

SendMessage または SendMessageBatch API コールを使用してメッセージを Amazon SQS キューに送信した後、ReceiveMessage API コールでメッセージを取得できます。ReceiveMessage API コールでキューにメッセージを見つけられなかった場合は、空の受信結果が返されます。

注: MaxNumberOfMessages パラメータは、返されるメッセージの最大数が 10 で、デフォルト値が 1 であることを指定します。

詳細については、「メッセージのライフサイクル」を参照してください。

解決策

メッセージが送信されたことを確認する

Amazon CloudWatch の NumberOfMessagesSent メトリクスを使用して、メッセージが Amazon SQS キューに送信されたことを確認します。Amazon SQS の SendMessage または SendMessageBatch API アクションを使用すると、送信されたメッセージを確認できます。

メッセージの重複排除を確認する

Amazon SQS First-In-First-Out (FIFO) キューでは重複メッセージは発生しないため、キューの重複が排除される可能性があります。メッセージの重複排除をチェックして、5 分間の重複排除間隔内にメッセージが送信されることを確認します。

メッセージの遅延を確認する

遅延キューとして設定した Amazon SQS キューは、遅延期間の間延期されます。メッセージタイマーを使用して送信したメッセージは、遅延時間が終了するまで表示されません。

キューに配信遅延またはメッセージタイマーを設定したかどうかを確認するには、CloudWatch の ApproximateNumberOfMessagesDelayed メトリクスを使用します。

ポーリングモードを確認する

メッセージが SQS キューに配信されても、ポーリングには使用できません。Amazon SQS ポーリングの詳細については、「適切なポーリングモードを使用する」を参照してください。

ショートポーリング

クエリでメッセージが見つからなかった場合でも、ショートポーリング応答はすぐに返されます。Amazon SQS はサーバーのサブセットをサンプリングし、それらのサーバーからのメッセージのみを返します。詳細については、「ショートポーリングによるメッセージの消費」を参照してください。

ロングポーリング

ロングポーリングでは、すべてのサーバーを使用してメッセージをクエリします。Amazon SQS は、指定された最大数まで利用可能なメッセージを少なくとも 1 つ収集した後に、応答を送信します。ポーリングの待機時間が経過した場合にのみ、空の応答が返されます。キューに ReceiveMessage 待機時間に低い値を指定するメッセージが含まれていると、空の応答を受け取ることがあります。詳細については、「ロングポーリングによるメッセージの消費」を参照してください。

同じグループ ID からのメッセージが送信中かどうかを確認する

FIFO キューのメッセージ順序は、メッセージグループレベルで維持されます。メッセージグループ ID を伴って受信したメッセージが削除または表示されない限り、同じグループ ID のメッセージはそれ以上返されません。メッセージがキューに配信されても、送信中または非表示のときには利用できない場合があります。

グループ ID のメッセージが送信中か非表示かを確認するには、CloudWatch の NumberOfMessagesReceived または ApproximateNumberOfMessagesNotVisible メトリクスを使用します。

詳細については、「Amazon SQS FIFO キューがすべてのメッセージまたは他のメッセージグループのメッセージを返すわけではない理由を知りたいです」を参照してください。

メッセージが利用可能となったか、表示されているかを確認する

別のコンシューマーがメッセージをポーリングしたときに、メッセージが送信中または非表示の場合、さらにポーリングを行うと空の受信が返されることがあります。受信可能なメッセージがないかどうかを確認するには、CloudWatch メトリクスの ApproximateNumberOfMessagesVisible または ApproximateNumberOfMessagesNotVisible を使用します。

キューが空かどうかをチェックする

キューが空かどうかを判断するには、ロングポーリングを使用して ReceiveMessage API を呼び出します。CloudWatch メトリクス ApproximateNumberOfMessagesVisibleApproximateNumberOfMessagesNotVisibleApproximateNumberOfMessagesDelayed を使用することもできます。すべてのメトリクス値が数分間 0 に設定されている場合、キューは空です。

詳細については、「キューが空であることを確認する」を参照してください。

AWS サポートによるトラブルシューティング

前述のトラブルシューティング手順で問題が解決しない場合は、AWS サポートに連絡してください。AWS サポートとの連絡には、メッセージリクエストの RequestIdタイムスタンプタイムゾーンを含めてください。

関連情報

Amazon SQS キューメッセージを消費したユーザーを把握する方法を教えてください

Amazon SQS キュー内のメッセージのバックログが増えるのを防ぐ方法を教えてください

Amazon SQS FIFO キューの始め方

AWS公式
AWS公式更新しました 1年前