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 つのメッセージが複数回処理されてしまいます。このシナリオを回避するには、デッドレターキューを設定します。

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

パフォーマンスを最適化するには、 可視性タイムアウトが AWS SDK の読み取りタイムアウトよりも大きくなるように設定する必要があります。これは、ショートポーリングまたはロングポーリングを使用して、 ReceiveMessage API アクションを使用する場合に適用されます。