Amazon SQS メッセージキューのロングポーリングの有効化 - AWS SDK for Java 1.x

AWS SDK for Java 1.x は 2024 年 7 月 31 日にメンテナンスモードに入り、2025 年 12 月 31 日に end-of-support に到達します。新しい機能、可用性の向上、セキュリティの更新を引き続き受け取るAWS SDK for Java 2.xには、 に移行することをお勧めします。

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

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 メソッドを呼び出す前に、SetQueueAttributesRequestReceiveMessageWaitTimeSeconds を設定することで既存のキューでも有効にできます。

インポート

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 で完全な例をご覧ください。

詳細