AWS re:Postを使用することにより、以下に同意したことになります 利用規約

Amazon SQS FIFO キューがすべてのメッセージまたは他のメッセージグループのメッセージを返すわけではないのはなぜですか?

所要時間1分
0

私の Amazon Simple Queue Service (Amazon SQS) 先入れ先出し (FIFO) キューが、ReceiveMessage API をコールしたときに一部のメッセージを返しません。SQS FIFO キューが特定のメッセージグループ ID からまたは他のメッセージグループからのすべてのメッセージを返すわけではないのはなぜですか?

解決方法

FIFO キューの場合、特定のメッセージグループ ID からのメッセージの受信をリクエストすることはできません。ReceiveMessage API コールで maxNumberOfMessages パラメータを指定すると、SQS は同じメッセージグループ ID を持つメッセージをできる限り多く返します。その後、他のコンシューマーまたは他の ReceiveMessage コールは、別のメッセージグループ ID を持つメッセージを処理できます。

FIFO キューの場合、特定のメッセージグループ ID に属するメッセージを受信する場合、次の点に注意してください。

  • 同じグループ ID からさらにメッセージを受信するには、現在の受信コールのメッセージを削除または移動する必要があります。
    : メッセージは、処理中の使用可能状態から移動する必要があります。
  • 他のメッセージグループのメッセージを受信することはできません。

FIFO キューは、最初の 20,000 個のメッセージを調べ、使用可能なメッセージグループを判別します。最初の 20,000 メッセージのすべてのメッセージグループが、処理中のメッセージが理由でブロックされた場合、最初の 20,000 の後の他のグループからのメッセージは返されません。詳細については、「同じグループ ID を持つメッセージの大きなバックログが発生しないようにする」を参照してください。

例 A

FIFO キューには合計 20,001 個のメッセージがあります。最初の 20,000 メッセージはメッセージグループ 1 に属し、最後のメッセージはメッセージグループ 2 に属します。キューからメッセージを受信しようとすると、グループ 1 からのメッセージのみを受信します。連続した ReceiveMessage のコールは、空の受信につながります。これは、FIFO がグループ 1 に属するメッセージのみを検索し、そのグループが現在のコールによってブロックされているために発生します。

例 B

FIFO キューには合計 20,000 個のメッセージがあります。最初の 19,999 メッセージはメッセージグループ 1 に属し、最後のメッセージはメッセージグループ 2 に属します。キューからメッセージを受信しようとすると、最初の ReceiveMessage コールはグループ 1 に属するメッセージを取得します。2 番目の ReceiveMessage コールは、グループ 2 に属するメッセージを取得します。両方のグループが現在のコールによってブロックされるようになったため、追加の ReceiveMessage コールは空の受信につながります。


関連情報

Amazon SQS FIFO (先入れ先出し) キュー

Amazon SQS メッセージグループ ID を使用する

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