Amazon Simple Queue Service
開発者ガイド

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

FIFO キューには、スタンダード キューの機能がすべて搭載されています。

サーバー側の暗号化 の有無にかかわらず、AWS マネジメントコンソール、AWS SDK for Java (および CreateQueue アクション)、または AWS CloudFormation を使用して、FIFO キューを作成する方法については、「Amazon SQS キューの作成」および「SSE を使用して Amazon SQS キューを作成する」を参照してください。

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

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

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

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

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

  • デフォルトで、スタンダード キューでは、バッチ処理を使用して、API アクション (SendMessageReceiveMessageDeleteMessage) ごとに 1 秒あたり最大 3,000 件のメッセージがサポートされます。制限の引き上げをリクエストする場合は、サポートリクエストを提出してください。

  • FIFO キューでは、バッチ処理を行わず API アクション (SendMessageReceiveMessageDeleteMessage) ごとに 1 秒あたり最大 300 件のメッセージがサポートされます。

注記

FIFO キューの名前は .fifo サフィックスで終わる必要があります。 サフィックスは、80 文字のキュー名の制限に対してカウントされます。キューが FIFO であるかどうかを確認するには、キュー名がサフィックスで終わるかどうかをチェックします。

FIFO キューに関連する制限については、「キューに関連する制限」を参照してください。

FIFO キューを使用した作業のベストプラクティスについては、「Amazon SQS FIFO キューのその他の推奨事項 」および「Amazon SQS スタンダード および FIFO (先入れ先出し) キューの推奨事項 」を参照してください。

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

メッセージの順序

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

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

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

また、FIFO キューでは、単一キュー内に複数の順序付けされたメッセージグループが存在できるメッセージグループがサポートされています。

重要な用語

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

メッセージ重複排除 ID

The 送信されたメッセージの重複排除に使用するトークン。特定のメッセージ重複排除 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 のメッセージを受信するようにリクエストすることはできません。

FIFO キューから複数のメッセージグループ ID を持つメッセージを受信した場合、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 キューを使用すると、重複をキューに送信することを防止できます。5 分間の重複排除間隔内に SendMessage アクションを再試行しても、Amazon SQS ではキューに重複を挿入しません。

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

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

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

スタンダード キューから FIFO キューへの移行

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

注記

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

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

  • デフォルトで、スタンダード キューでは、バッチ処理を使用して、API アクション (SendMessageReceiveMessageDeleteMessage) ごとに 1 秒あたり最大 3,000 件のメッセージがサポートされます。制限の引き上げをリクエストする場合は、サポートリクエストを提出してください。 FIFO キューでは、バッチ処理を行わず API アクション (SendMessageReceiveMessageDeleteMessage) ごとに 1 秒あたり最大 300 件のメッセージがサポートされます。

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

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

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

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

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

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

詳細については、 Amazon Simple Queue Service API Referenceを参照してください。

互換性

クライアント

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

サービス

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

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

AWS サービスの次の機能は、現在 FIFO キューに対応していません。

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