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

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

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

Amazon SQS 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 キューを使用した作業のベストプラクティスについては、「FIFO キューのその他の推奨事項Amazon SQS」および「の推奨事項 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 のメッセージを受信するようにリクエストすることはできません。

複数のメッセージグループ IDs を持つ 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 (ただしメッセージの属性ではない) を生成するように指示するものです。—詳細については、CreateQueueGetQueueAttributesSetQueueAttributes、および Amazon Simple Queue Service API Reference アクションのドキュメントを参照してください。

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

標準キューから 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 キューと互換性がない可能性があります。

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

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