Amazon SQS 可視性タイムアウト - Amazon Simple Queue Service

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

Amazon SQS 可視性タイムアウト

コンシューマーがキューからメッセージを受信して処理しても、そのメッセージはキューに残ったままです。Amazon SQS では、メッセージが自動的に削除されません。Amazon SQS は分散システムであり、接続の問題やコンシューマーアプリケーションの問題などが原因で、コンシューマーが実際にメッセージを受信するという保証がないためです。そのため、コンシューマーはメッセージを受信して処理した後、キューからメッセージを削除する必要があります。


	            可視性タイムアウト

メッセージが受信された直後は、メッセージはキューに残ったままです。他の消費者が再度メッセージを処理しないようにするため、Amazon SQS では可視性タイムアウトで、Amazon SQS によって他の消費者がそのメッセージを受信および処理できなくなる期間です。メッセージのデフォルトの可視性タイムアウトは 30 秒です。最小値は 0 秒です。最大12時間です。コンソールを使用してキューの可視性タイムアウトを設定する方法の詳細については、」キューパラメータの設定(コンソール)

注記

標準キューでは、可視性タイムアウトはメッセージを 2 回受信しない保証にはなりません。詳細については、「少なくとも 1 回の配信」を参照してください。

FIFO キューでは、プロデューサまたはコンシューマが複数の再試行を試行できます。

  • プロデューサーが故障を検出した場合SendMessageアクションを使用すると、同じメッセージの重複除外 ID を使用して、必要な回数だけ送信を再試行できます。重複排除間隔の期限が切れる前にプロデューサーが少なくとも1つの確認を受信したと仮定すると、複数の再試行がメッセージの順序に影響したり、重複が発生したりすることはありません。

  • コンシューマが障害を検出した場合ReceiveMessageアクションを使用すると、同じ受信要求試行 ID を使用して、必要な回数だけ再試行できます。可視性タイムアウトの期限が切れる前に、コンシューマーが少なくとも 1 つの確認応答を受信すると仮定すると、複数回再試行してもメッセージの順序には影響しません。

  • メッセージグループ ID を持つメッセージを受信すると、メッセージを削除するか、メッセージが表示されない限り、同じメッセージグループ ID のメッセージは返されません。

インフライトメッセージ

Amazon SQS メッセージには、次の 3 つの基本的な状態があります。

  1. プロデューサーによってキューに送信されます。

  2. コンシューマによってキューから受信されました。

  3. キューから削除されました。

メッセージは、保存されたがプロデューサーによってキューに送信された後、コンシューマーによってキューからまだ受信されていない(つまり、状態1と2の間)。格納されたメッセージの数に対するクォータはありません。メッセージは、飛行は、コンシューマーによってキューから受信されたが、キューからまだ削除されていない(つまり、状態2と3の間)。保留メッセージの数にはクォータがあります。

重要

機内メッセージに適用されるクォータは、無制限保存されたメッセージの数。

ほとんどの標準キュー (キュートラフィックとメッセージバックログにより異なります) では、最大 120,000 のインフライトメッセージが存在できます (コンシューマーによってキューから受信されますが、キューからはまだ削除されません)。使用中にこのクォータに達するとショートポーリングの場合、Amazon SQS はOverLimitエラーメッセージ。使用すると、ロングポーリングでは、Amazon SQS はエラーメッセージを返しません。クォータに到達しないように、処理されたメッセージはキューから削除する必要があります。メッセージの処理に使用するキューの数を増やすこともできます。クォータの引き上げをリクエストするには、サポートリクエストを送信します

FIFO キューでは、最大 20,000 のインフライトメッセージが存在できます (コンシューマーによってキューから受信されますが、まだキューから削除されません)。このクォータに達すると、Amazon SQS はエラーメッセージを返しません。

可視性タイムアウトの設定

可視性タイムアウトは Amazon SQS がメッセージを返した時点で始まります。タイムアウト時間内に、コンシューマーはメッセージを処理して削除します。ただし、コンシューマーでメッセージを削除する前に障害が発生して、DeleteMessage アクションが呼び出されないまま可視性タイムアウトの期限が切れると、そのメッセージは他のコンシューマーに見えるようになり、再度受信されます。メッセージを一度だけ受信する必要がある場合、コンシューマーは可視性タイムアウトの時間内にメッセージを削除する必要があります。

すべての Amazon SQS キューの可視性タイムアウトはデフォルトで 30 秒に設定されています。この設定はキュー全体で変更できます。通常、可視性タイムアウトは、アプリケーションがキューのメッセージを処理して削除するまでの最大所要時間に設定します。メッセージを受信したら、キュー全体のタイムアウトを変更しなくても、返されるメッセージに特別な可視性タイムアウトを設定することもできます。詳細については、「タイムリーな方法でのメッセージの処理」セクションのベストプラクティスを参照してください。

メッセージを処理するのにかかる時間がわからない場合は、ハートビートあなたの消費者プロセスのために:最初の可視性タイムアウト(たとえば、2 分)を指定し、コンシューマーがメッセージを処理している限り、可視性タイムアウトを毎分 2 分延長します。

重要

最大可視性タイムアウトは、Amazon SQS がReceiveMessageリクエスト. 可視性タイムアウトを延長しても、12 時間という最大時間はリセットされません。コンシューマーが 12 時間以上必要とする場合は、Step Functions の使用を検討してください。

メッセージの可視性タイムアウトの変更

キューからメッセージを受信し、処理を開始したときに、キューの可視性タイムアウトが十分でない場合があります (たとえば、メッセージを処理して削除する必要がある場合)。ChangeMessageVisibility アクションを使用して新しいタイムアウト値を指定すると、メッセージの可視性を短縮または拡張することができます。

たとえば、キューのデフォルトのタイムアウトが 60 秒であり、メッセージを受信してから 15 秒が経過したときに、VisibilityTimeout を 10 秒に設定した ChangeMessageVisibility コールを送信する場合、この 10 秒は ChangeMessageVisibility コールを行った時点からカウントが開始されます。したがって、最初に可視性タイムアウトを変更してから 10 秒 (合計 25 秒) 経過した後に可視性タイムアウトを変更しようとしたり、そのメッセージを削除しようとすると、エラーが発生する可能性があります。

注記

新しいタイムアウト期間は、ChangeMessageVisibility アクションを呼び出した時間から有効になります。さらに、新しいタイムアウト期間はメッセージの特定の受信にのみ適用されます。ChangeMessageVisibility は、メッセージの以降の受信や以降のキューには影響しません。

メッセージの可視性タイムアウトの終了

キューからメッセージを受信すると、そのメッセージを実際に処理して削除する必要がないことがわかる場合があります。Amazon SQS では、特定のメッセージの可視性タイムアウトを終了できます。その場合、システムの他のコンポーネントからメッセージがすぐに見えるようになり、処理できるようになります。

呼び出し後にメッセージの可視性タイムアウトを終了するにはReceiveMessage, コールChangeMessageVisibilityVisibilityTimeoutを 0 秒に設定します。