Amazon SQS の標準キューで重複排除に利用できるキーを教えてください
困っていた内容
Amazon SQS の標準キューは At-least once のため、受信アプリケーション側で重複排除を行う予定です。
メッセージ ID は重複排除処理に利用できますか。利用できるユニークなキーを教えてください。
どう対応すればいいの?
プロデューサー側でユニークなキーを発行し、メッセージに含めてください。
メッセージの重複は次の 2 つのパターンが想定されます。
- At-least once に起因するもの
- プロデューサーに起因するもの
At-least once の仕様により同一のメッセージが複数回配信された場合、メッセージ ID は同一となります。
一方で、プロデューサー側のリトライなどで、同一のメッセージが異なるメッセージ ID で複数回登録される可能性があります。
Amazon SQS と処理の重複 前編 ~ 可視性タイムアウトの役割 - builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
3-3. プロデューサーのメッセージ送信時に起きうる重複
そのため、重複排除処理を行う際のキーは、プロデューサー側で発行したユニークなキーをメッセージに含め、そのキーを用いてコンシューマー側でべき等な実装を行う際に利用してください
参考資料
3-2. スタンダードキューの仕様により起きうる重複
…(中略)…
3-3. プロデューサーのメッセージ送信時に起きうる重複
Dynamo DB等を活用して処理済みであることを
判定できる仕組みを導入し重複実行しない設計例:アプリで発行したID等を記録し重複処理を排除
At-least once 配信 — 少なくとも 1 回の配信が保証されます。つまり、すべてのメッセージは少なくとも 1 回配信されますが、再試行やネットワーク遅延が原因で 2 回以上配信される場合もあります。同じメッセージを複数回処理してもシステムの状態に影響が及ばないように、べき等性オペレーションを使用して重複メッセージに対応できるようにアプリケーションを設計する必要があります。
各メッセージは、システム割り当てのメッセージ ID を受け取ります。この ID は、Amazon SQS から SendMessage レスポンスで返されます。この識別子は、メッセージを特定する場合に役立ちます。メッセージ IDの最大長は100文字です。
まず、メッセージ ID を確認して、同じメッセージが複数回受信されていることを確認します。前述のいずれかの理由で同じメッセージのコピーを複数回受信する場合、メッセージの ID は同じです。この場合は、以下の手順に従ってください。同じ内容でメッセージ ID が異なる複数のメッセージを受信する場合、メッセージはキューに複数回送信されています。この場合は、メッセージプロデューサーを確認してください。






