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

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

Amazon SQS 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 コールをサポートします。

注記
  • Amazon SNS は現在、FIFO キューと互換性がありません。

  • 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 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 のメッセージを受信するようにリクエストすることはできません。

複数のメッセージグループ 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 キューは、重複をキューに送信しないようにするのに役立ちます。5 分間の重複排除間隔内に SendMessage アクションを再試行しても、Amazon SQS ではキューに重複を挿入しません。

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

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

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

標準キューから 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 Referenceを参照してください。

Compatibility

クライアント

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

サービス:

アプリケーションが複数の AWS サービス、または AWS および外部サービスでは、どのサービス機能が FIFO キューをサポートしないのかを理解することが重要です。

一部 AWS または、 Amazon SQS は、FIFO キューをターゲットとして設定できるにもかかわらず、FIFO キューと互換性がない可能性があります。

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

他のサービスと FIFO キューとの互換性については、サービスマニュアルを参照してください。