Amazon SQS FIFO (先入れ先出し) キュー - Amazon Simple Queue Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

Amazon SQS FIFO キューの高スループットはプレビューリリースであり、変更される可能性があります。詳細については、「プレビュー: FIFO キューの高スループット」を参照してください。

FIFO キューには、標準キュー

FIFO (先入れ先出し)キューは、オペレーションやイベントの順序が重要である場合、または重複不可の場合などにアプリケーション間のメッセージングを強化します。FIFO キューを使用する可能性のある状況の例を次に示します。

  • ユーザーが入力したコマンドが正しい順序で実行されていることを確認します。

  • 価格の変更を正しい順序で送信して、正しい製品価格を表示します。

  • アカウントを登録する前に受講者がコースに登録できないようにします。

FIFO キューはまた、1 回だけの処理を提供しますが、1 秒あたりのトランザクション (TPS) は制限されます。

  • バッチ処理を使用する場合、FIFO キューは API メソッド (SendMessageBatchReceiveMessage、または DeleteMessageBatch) ごとに 1 秒あたり最大 3,000 のトランザクションをサポートします。3000 のトランザクションは 300 の API コールを表し、それぞれに 10 個のメッセージのバッチがあります。クォータの引き上げをリクエストするには、サポートリクエストを送信します

  • バッチ処理を行わない場合、FIFO キューは、API メソッド (SendMessageReceiveMessage、または DeleteMessage) ごとに 1 秒あたり最大 300 の API コールをサポートします。

注記

FIFO キューの名前はの末尾に.fifoサフィックス。サフィックスは、80 文字のキュー名クォータにカウントされます。キューがFIFOでは、キュー名がサフィックスで終わるかどうかを確認できます。

Amazon SQS FIFO キューは、Amazon SQS が利用可能なすべてのリージョンで利用可能。

Amazon SQS コンソールを使用したキューの作成および設定方法については、「」を参照してください。Amazon SQS キューを作成する (コンソール)。Java の例については、Amazon SQS Java SDK の例

FIFO キューに関連するクォータについては、キューに関連するクォータ

FIFO キューを使用した作業のベストプラクティスについては、Amazon SQS FIFO キューの追加推奨事項およびAmazon SQS 標準および FIFO キューに関する推奨事項

FIFO キューおよびクライアントやサービスとの互換性については、「」を参照してください。Compatibility

メッセージの順序

FIFO キューは、を改良したものであり、これを補完するものです。標準キュー。このキュータイプの最も重要な機能は、FIFO (先入れ先出し) 配信および1 回だけの処理:

  • メッセージが送信または受信される順序は厳密に保持されます。また、メッセージは 1 回のみ配信され、コンシューマーが処理して削除するまで使用可能な状態で残り続けます。

  • このキューでは、重複は導入されていません。

さらに、FIFOキューはメッセージグループ単一キュー内に複数の順序付けされたメッセージグループが存在します。FIFO キュー内のメッセージグループ数に対するクォータはありません。

重要な用語

以下の重要な用語は、FIFO キューの機能を理解するうえで役立ちます。詳細については、『』を参照してください。Amazon Simple Queue Service API リファレンス

メッセージ重複排除 ID

送信されたメッセージの重複排除に使用されるトークン。特定のメッセージ重複除外 ID を持つメッセージが正常に送信された場合、同じメッセージ重複除外 ID で送信されたメッセージは正常に受け入れられますが、5 分間の重複排除の間は配信されません。

注記

メッセージの重複排除は、個々のメッセージグループではなく、キュー全体に適用されます。

Amazon SQS は、メッセージの受信および削除後も、メッセージの重複除外 ID を追跡します。

メッセージグループ ID

メッセージが特定のメッセージグループに属することを指定するタグ。同じメッセージグループに属するメッセージは、常に、メッセージグループに対する厳密な順序で 1 つずつ処理されます(ただし、異なるメッセージグループに属するメッセージは、順番どおりに処理されます)。

受信リクエスト試行 ID

の重複排除に使用されるトークンReceiveMessageを呼び出します。

シーケンス番号

Amazon SQS が各メッセージに割り当てる、連続しない大きな番号。

FIFO 配信ロジック

次の概念は、FIFO 間のメッセージの送受信を理解する上で役立ちます。

メッセージの送信

複数のメッセージが連続して FIFO キューに送信され、それぞれに異なるメッセージ重複排除 ID が付いている場合、Amazon SQS はメッセージを保存し送信を認識します。その後、各メッセージを、送信された正確な順序で受信し処理できます。

FIFO キューでは、メッセージはメッセージグループ ID に基づいて順序付けられます。複数のホスト (または同一ホストの異なるスレッド) から同じメッセージグループ ID のメッセージが FIFO キューに送信された場合、Amazon SQS はメッセージを受信順に保存して処理を待っています。Amazon SQS でメッセージの送受信順序が確実に保持されるように、各プロデューサーは一意のメッセージグループ ID を使用してすべてのメッセージを送信する必要があります。

FIFO キューロジックは、メッセージグループ ID ごとにのみ適用されます。各メッセージグループ ID は、Amazon SQS キュー内の異なる順序付けされたメッセージグループを表します。メッセージグループ ID ごとに、すべてのメッセージが厳密な順序で送受信されます。ただし、異なるメッセージグループ ID 値のメッセージは、送信および受信の順序が入れ替わる場合があります。メッセージグループ ID をメッセージに関連付ける必要があります。メッセージグループ ID を指定しない場合、アクションは失敗します。順序付けされたメッセージの単一グループが必要な場合は、FIFO キューに送信されるメッセージに同じメッセージグループ ID を指定します。

メッセージの受信

特定のメッセージグループ ID のメッセージを受信するようにリクエストすることはできません。

複数のメッセージグループ ID を持つ FIFO キューからメッセージを受信した場合、Amazon SQS ではまず同じメッセージグループ ID を持つメッセージをできる限り多く返すよう試みます。こうすることで、他のコンシューマーが別のメッセージグループ ID を持つメッセージを処理できます。

注記

MaxNumberOfMessages アクションの ReceiveMessage リクエストパラメータを使用した 1 回の呼び出しで最大 10 件のメッセージを受信できます。これらのメッセージには、FIFO の順序が保持され、同じメッセージグループ ID を持つことができます。したがって、同じメッセージグループ ID で使用可能なメッセージが 10 件未満の場合、別のメッセージグループ ID からメッセージを受け取ることがあります。10 件のメッセージのバッチは同じですが、FIFO の順序は維持されています。

複数回の再試行

FIFO キューでは、プロデューサまたはコンシューマが複数の再試行を試行できます。

  • プロデューサーが故障を検出した場合SendMessageアクションを使用すると、同じメッセージの重複除外 ID を使用して、必要な回数だけ送信を再試行できます。重複排除間隔の期限が切れる前にプロデューサーが少なくとも1つの確認を受信したと仮定すると、複数の再試行がメッセージの順序に影響したり、重複が発生したりすることはありません。

  • コンシューマが障害を検出した場合ReceiveMessageアクションを使用すると、同じ受信要求試行 ID を使用して、必要な回数だけ再試行できます。可視性タイムアウトの期限が切れる前に、コンシューマーが少なくとも 1 つの確認応答を受信すると仮定すると、複数回再試行してもメッセージの順序には影響しません。

  • メッセージグループ ID を持つメッセージを受信すると、メッセージを削除するか、メッセージが表示されない限り、同じメッセージグループ ID のメッセージは返されません。

1 回だけの処理

標準キューとは異なり、FIFO キューでは重複メッセージがありません。FIFO キューを使用すると、重複をキューに送信することを防止できます。再試行すると、SendMessage5 分間の重複排除間隔内に Amazon SQS ではキューに重複を挿入しません。

重複排除を設定するには、次のいずれかを実行する必要があります。

  • コンテンツベースの重複排除を有効にします。これにより、Amazon SQS は SHA-256 ハッシュを使用して、メッセージ本文を使用したメッセージ重複排除 ID (メッセージの属性ではなく) を生成するように指示されます。詳細については、『』のドキュメントを参照してください。CreateQueueGetQueueAttributes, およびSetQueueAttributesのアクションAmazon Simple Queue Service API リファレンス

  • メッセージに明示的にメッセージ重複排除 ID を指定 (またはシーケンス番号を参照) します。詳細については、『』のドキュメントを参照してください。SendMessageSendMessageBatch, およびReceiveMessageのアクションAmazon Simple Queue Service API リファレンス

標準キューから FIFO キューへの移行

標準キューを使用している既存のアプリケーションがあり、FIFO キューの特徴である順序付けや 1 回のみ処理を活用する場合、キューとアプリケーションを正しく設定する必要があります。

注記

既存の標準キューを FIFO キューに変換することはできません。移行するには、アプリケーション用に新しい FIFO キューを作成するか、既存の標準キューを削除して FIFO キューとして再作成する必要があります。

アプリケーションが FIFO キューで正しく動作することを確認するには、次のチェックリストを使用します。

  • バッチ処理を使用する場合、FIFO キューは API メソッド (SendMessageBatchReceiveMessage、または DeleteMessageBatch) ごとに 1 秒あたり最大 3,000 のトランザクションをサポートします。3000 のトランザクションは 300 の API コールを表し、それぞれに 10 個のメッセージのバッチがあります。クォータの引き上げをリクエストするには、サポートリクエストを送信します。バッチ処理を行わない場合、FIFO キューは、API メソッド (SendMessageReceiveMessage、または DeleteMessage) ごとに 1 秒あたり最大 300 の API コールをサポートします。

  • FIFO キューでは、メッセージ単位の遅延をサポートしていません。キュー単位の遅延のみをサポートします。アプリケーションで、各メッセージの DelaySeconds パラメータが同じ値に設定されている場合、アプリケーションを変更してメッセージ単位の遅延を削除し、代わりにキュー全体に DelaySeconds を設定する必要があります。

  • FIFO キューに送信される各メッセージには、メッセージグループ ID が必要です。複数の順序付けされたメッセージグループが必要ない場合は、すべてのメッセージに同じメッセージグループ ID を指定します。

  • FIFO キューにメッセージを送信する前に、以下を確認してください。

    • アプリケーションが同一のメッセージ本文を使用してメッセージを送信する場合は、アプリケーションを変更して、送信される各メッセージに対して一意のメッセージ重複排除 ID を提供できます。

    • アプリケーションが一意のメッセージ本文を使用してメッセージを送信する場合は、コンテンツベースの重複排除を有効にできます。

  • コンシューマーのコードを変更する必要はありません。ただし、メッセージの処理に長時間かかり、可視性タイムアウトが高い値に設定されている場合は、各 ReceiveMessage アクションに受信リクエスト試行 ID を追加することを検討してください。これは、ネットワーク障害の場合に受信試行を再試行し、受信試行の失敗によりキューが停止するのを防止します。

詳細については、『』を参照してください。 Amazon Simple Queue Service API リファレンス

Compatibility

クライアント

Amazon SQS バッファ付き非同期クライアントは、現在 FIFO キューをサポートしていません。

サービス

アプリケーションで AWS の複数のサービスを使用する場合や AWS のサービスと外部のサービスを組み合わせて使用する場合は、どのサービス機能が FIFO キューをサポートしないかを把握しておくことが重要です。

Amazon SQS に通知を送信する一部の AWS または外部サービスは、FIFO キューをターゲットとして設定できるにもかかわらず、FIFO キューと互換性がない場合があります。

AWS サービスの以下の機能は、現在、FIFO キューと互換性がありません。

FIFO キューを使用した他のサービスとの互換性については、サービスドキュメントを参照してください。