AWS SDK for Java 1.x は 2024 年 7 月 31 日にメンテナンスモードに入り、2025 年 12 月 31 日に end-of-support
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQS メッセージキューのロングポーリングの有効化
Amazon SQS はデフォルトでショートポーリングを使用して、サーバーのサブセットだけに対して (重み付けされたランダムディストリビューションに基づいて) クエリを実行し、レスポンスに含めることができるメッセージがあるかどうかを調べます。
ロングポーリングは、Amazon SQS キューに送信された ReceiveMessage リクエストに応答して返信するメッセージがない場合に、偽の空のレスポンスを排除して空のレスポンスの数を減らすことで、Amazon SQS の使用コストを削減します。
注記
1~20 秒でロングポーリング頻度を設定できます。
キューの作成時にロングポーリングを有効化する
Amazon SQS キューを作成するときにロングポーリングを有効にするには、AmazonSQS クラスの createQueue
メソッドを呼び出す前に CreateQueueRequest オブジェクトの ReceiveMessageWaitTimeSeconds
属性を設定します。
インポート
import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException; import com.amazonaws.services.sqs.model.CreateQueueRequest;
Code
final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Enable long polling when creating a queue CreateQueueRequest create_request = new CreateQueueRequest() .withQueueName(queue_name) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); try { sqs.createQueue(create_request); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } }
GitHub
既存のキューでロングポーリングを有効にする
キューを作成するときにロングポーリングを有効にすることに加えて、AmazonSQS クラスの setQueueAttributes
メソッドを呼び出す前に、SetQueueAttributesRequest で ReceiveMessageWaitTimeSeconds
を設定することで既存のキューでも有効にできます。
インポート
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
Code
SetQueueAttributesRequest set_attrs_request = new SetQueueAttributesRequest() .withQueueUrl(queue_url) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); sqs.setQueueAttributes(set_attrs_request);
GitHub
メッセージ受信時のロングポーリングを有効にする
メッセージを受信した時にロングポーリングを有効にするには、AmazonSQS クラスの receiveMessage
メソッドに提供する ReceiveMessageRequest の待機時間を秒単位で設定します。
注記
次のポーリングイベントの待機中に receiveMessage
リクエストがタイムアウトしないように、AWS クライアントのリクエストのタイムアウトがロングポーリングの最大値 (20 秒) より長いことを確認します。
インポート
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
Code
ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(queue_url) .withWaitTimeSeconds(20); sqs.receiveMessage(receive_request);
GitHub
詳細
-
Amazon SQS デベロッパーガイドの Amazon SQS ロングポーリング
-
Amazon SQS API リファレンスの CreateQueue
-
Amazon SQS API リファレンスの ReceiveMessage
-
Amazon SQS API リファレンスの SetQueueAttributes