

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

# Amazon SQS のメッセージ処理とタイミング
<a name="best-practices-message-processing"></a>

このトピックでは、Amazon SQS でのメッセージ処理の速度と効率を最適化するための包括的なガイダンスを提供します。これには、タイムリーなメッセージ処理、最適なポーリングモードの選択、パフォーマンスを向上させるためのロングポーリングの設定などが含まれます。

****トピック****
+ [Amazon SQS でのタイムリーな方法でのメッセージ処理](best-practices-processing-messages-timely-manner.md)
+ [Amazon SQS でのロングポーリングの設定](best-practices-setting-up-long-polling.md)
+ [Amazon SQS での適切なポーリングモードの使用](best-practices-using-appropriate-polling-mode.md)

# Amazon SQS でのタイムリーな方法でのメッセージ処理
<a name="best-practices-processing-messages-timely-manner"></a>

可視性タイムアウトの設定は、アプリケーションがメッセージを処理し、削除するのにかかる時間によって異なります。たとえば、アプリケーションでメッセージを処理するには 10 秒必要だが、可視性タイムアウトを 15 分に設定した場合、前のメッセージ処理に失敗すると、再度処理されるまでに長時間待つ必要があります。または、アプリケーションでメッセージを処理するには 10 秒必要だが、可視性タイムアウトを 2 秒に設定した場合は、元のコンシューマーがメッセージを処理している間に別のコンシューマーより重複メッセージが送信されます。

メッセージの処理に十分な時間を確保するために、次のいずれかの方法を使用します:
+ メッセージの処理にかかる時間がわかっている (または合理的に見積もることができる) 場合は、メッセージの*可視性タイムアウト*を、メッセージの処理と削除にかかる最大時間に拡張します。詳細については、\$1[可視性タイムアウトの構成](sqs-visibility-timeout.md#configuring-visibility-timeout)｝を参照してください。
+ メッセージの処理にかかる時間がわからない場合は、コンシューマプロセスについて*ハートビート*を作成:初期可視性タイムアウト (2 分など) を特定し、コンシューマがメッセージで作業している限り、可視性タイムアウトを 1 分ごとに 2 分延長します。
**重要**  
最大可視性タイムアウトは、`ReceiveMessage`Amazon SQS がメッセージを受信してから 12 時間です。可視性タイムアウトを延長しても、12 時間の上限はリセットされません。  
さらに、`ReceiveMessage` リクエストによってタイマーが開始されるため、個々のメッセージのタイムアウトは上限の 12 時間 (43,200 秒) に設定できない場合があります。例えば、メッセージを受信して、すぐに `VisibilityTimeout` を 43,200 秒に等しく設定して `ChangeMessageVisibility` コールを送信すると、失敗する場合があります。ただし、値として 43,195 秒を使用すると、`ReceiveMessage` 経由でメッセージをリクエストしてから可視性タイムアウトを更新するまでに大幅な遅延がない限り、成功します。コンシューマーが 12 時間以上必要とする場合は、Step Functionsの使用を検討してください。

# Amazon SQS でのロングポーリングの設定
<a name="best-practices-setting-up-long-polling"></a>

待ち時間がいつになるか`[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)`API アクションが0より大きい場合*ロングポーリング*が有効です。ロングポーリングの最大待機時間は 20 秒です。ロングポーリングは、空のレスポンス (`ReceiveMessage`リクエストに使用可能なメッセージがない場合) と偽の空のレスポンス (メッセージが使用可能でレスポンスに含まれていない場合) の数を減らすことで、Amazon SQS を使用するコストを削減します。詳細については、「[Amazon SQSショートポーリングとロングポーリング](sqs-short-and-long-polling.md)」を参照してください。

最適なメッセージ処理を行うには、次の方法を使用します。
+ ほとんどの場合、`ReceiveMessage` 待機時間を 20 秒に設定します。アプリケーションの設定時間として 20 秒が長すぎる場合は、`ReceiveMessage` 待機時間の値を小さくします (最小 1 秒)。 AWS SDK を使用して Amazon SQS にアクセスしない場合、または AWS SDK に短い待機時間を設定する場合は、長いリクエストを許可するか、長いポーリングに短い待機時間を使用するように Amazon SQS クライアントを変更する必要があります。
+ 複数のキューにロングポーリングを実行する場合は、すべてのキューに単一スレッドを使用せずに、キューごとに 1 つのスレッドを使用します。キューごとに 1 つのスレッドを使用した場合は、メッセージが使用可能になると、アプリケーションはキューごとにメッセージを処理できるのに対し、複数のキューを単一スレッドでポーリングすると、使用可能なメッセージがないキューを待機 (最大 20 秒) している間、アプリケーションは他のキューで使用可能なメッセージを処理できません。

**重要**  
HTTP エラーを回避するには、`ReceiveMessage` リクエストの HTTP レスポンスタイムアウトが `WaitTimeSeconds` パラメータよりも長いことを確認してください。詳細については、「[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)」を参照してください。

# Amazon SQS での適切なポーリングモードの使用
<a name="best-practices-using-appropriate-polling-mode"></a>
+ ロングポーリングにより、Amazon SQSキューからメッセージが利用可能になるとすぐに処理することができます。
  + Amazon SQS の使用でコストを削減し、空のキューでの空の受信数 (メッセージを返さない `ReceiveMessage` アクションへのレスポンス) を減らすには、ロングポーリングを有効にします。詳細については、「[Amazon SQS ロングポーリング](sqs-short-and-long-polling.md)」を参照してください。
  + 複数の受信により、複数のスレッドをポーリングする際の効率を高めるには、スレッド数を減らします。
  + ロングポーリングは、ほとんどの場合にショートポーリングよりも推奨されます。
+ ショートポーリングは、ポーリングされたAmazon SQSキューが空の場合でも、すぐにレスポンスを返します。
  + `ReceiveMessage` リクエストへの即時のレスポンスが期待されるアプリケーションの要件を満たすには、ショートポーリングを使用します。
  + ショートポーリングはロングポーリングと同じように請求されます。