複数のコンシューマーが同じキューからメッセージを取得する場合、コンシューマーが途中で失敗すると、メッセージが複数回処理されたり、失われたりする可能性があります。Simple Message Queue (旧称:MNS) は、これらの両方の結果を防ぐために可視性タイムアウトメカニズムを使用します。
Simple Message Queue (旧称:MNS) の各キューには、設定可能な表示不可タイムアウトがあります。コンシューマーがメッセージを取得すると、そのタイムアウトの間、メッセージは他のすべてのコンシューマーに対して非表示になります。これにより、コンシューマーはメッセージを処理するための排他的な時間を得ます。
仕組み
メッセージを取得した後、コンシューマーは可視性タイムアウトの有効期限が切れるまでに、以下のいずれかの操作を実行する必要があります。
処理が成功した場合:受信ハンドル(ReceiptHandle)を使用してメッセージを削除します。これにより、メッセージはキューから完全に削除され、正常に消費されたことが確認されます。
処理が失敗した場合、または処理に時間がかかる場合:有効期限が切れる前に ChangeVisibilityTimeout を呼び出して可視性タイムアウトを延長します。タイムアウトを延長しない場合、メッセージは再度表示され、別のコンシューマーが取得する可能性があり、結果として重複処理が発生します。