Amazon SQS メッセージ重複排除 ID の使用 - Amazon Simple Queue Service

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

Amazon SQS メッセージ重複排除 ID の使用

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

注記

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

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

メッセージ重複排除 ID の提供

以下のシナリオで各メッセージについて、プロデューサーはメッセージ重複排除 ID の値を指定する必要があります。

  • Amazon SQS で一意として扱う必要がある、同一のメッセージ本文で送信されるメッセージ。

  • Amazon SQS で一意として扱う必要がある、同一の内容だが異なるメッセージ属性で送信されるメッセージ。

  • Amazon SQS が重複として扱う必要がある、異なる内容 (たとえば、メッセージ本文に再試行回数が含まれる) で送信されるメッセージ。

シングルプロデューサー/コンシューマーシステムでの重複排除の有効化

プロデューサーとコンシューマーがそれぞれ単一であり、メッセージ本文にアプリケーション固有のメッセージ ID が含まれているためメッセージが一意である場合は、次のベストプラクティスに従います。

  • キューでコンテンツベースの重複排除を有効にします (メッセージ本文がそれぞれ一意)。プロデューサーはメッセージ重複排除 ID を省略できます。

  • コンシューマーでは各リクエストに対する受信リクエスト試行 ID は必須ではありませんが、失敗再試行シーケンスの実行が速くなるため、これがベストプラクティスです。

  • リクエストの送信や受信は再試行できます。FIFO キュー内のメッセージの順序が妨げられることはありません。

停止の復旧シナリオを考慮した設計

FIFO キューの重複排除プロセスでは、時間が重要です。アプリケーションを設計するときは、プロデューサーとコンシューマーの両方で、クライアントやネットワークが停止した場合に復旧できるようにします。

  • プロデューサーは、キューの重複排除間隔を認識する必要があります。Amazon SQS の重複除外間隔は 5 分です。重複排除間隔の期限後に SendMessage リクエストを再試行すると、重複メッセージが作成される場合があります。たとえば、車内からモバイルデバイスで、順番が重要なメッセージを送信するとします。確認を受信する前に車が一定時間モバイル接続を失った場合、モバイル接続が回復した後もう一度リクエストを再試行すると、重複が発生します。

  • コンシューマーには、可視性タイムアウトが切れる前にメッセージを処理できなくなるリスクを最小化する可視性タイムアウトが必要です。ChangeMessageVisibility アクションをコールして、メッセージが処理されている間に可視性タイムアウトを延長できます。ただし、可視性タイムアウトの期限が切れると、別のコンシューマーがすぐにメッセージの処理を開始するため、1 つのメッセージが複数回処理されてしまいます。このシナリオを回避するには、デッドレターキューを設定します。

可視性タイムアウトの操作

最適なパフォーマンスを得るには、可視性タイムアウトより大きくなるようにするAWSSDK 読み取りタイムアウト。これは、ReceiveMessageいずれかを使用した API アクションショートポーリングまたはロングポーリング