チュートリアル: Amazon SQS キューにロングポーリングを設定する - Amazon Simple Queue Service

チュートリアル: Amazon SQS キューにロングポーリングを設定する

ReceiveMessage API アクションの待機時間が 0 より大きい場合は、ロングポーリングが有効です。最大ロングポーリングの待ち時間 20 秒です。ロングポーリングは、空のレスポンス(ReceiveMessage リクエストに対して使用できるメッセージがない場合)と、偽の空のレスポンス(メッセージが利用できるがレスポンスに含まれていない場合)の数を削減することで、Amazon SQS の使用コストを削減するために役立ちます。 このチュートリアルでは、Amazon SQS キューのロングポーリングを設定する方法について学習します。詳細については、「Amazon SQS ショートポーリングとロングポーリング」を参照してください。

AWS マネジメントコンソール

  1. Amazon SQS コンソールにサインインします。

  2. [新しいキューの作成] を選択します。

  3. [新しいキューの作成] ページで、正しいリージョンにいることを確認してから、[キュー名] を入力します。

    注記

    FIFO キューの名前は .fifo サフィックスで終わる必要があります。

  4. [スタンダード] がデフォルトで選択されます。[FIFO] を選択します。

  5. [Configure Queue] を選択します。

  6. [メッセージ受信待機時間] に 120 の数を入力します。

    注記

    この値を 0 に設定すると、ショートポーリングが設定されます。詳細については、「ロングポーリングとショートポーリングの違い」を参照してください。

  7. [Create Queue] を選択します。

    ロングポーリングを使用するように設定された新しいキューが作成され、キューの一覧で選択されます。

    注記

    キューを作成しても、Amazon SQS 全体に周知されるまで少し時間がかかることがあります。

AWS SDK for Java

次の例では、AWS Java SDK を使用しています。SDK のインストールとセットアップについては、AWS SDK for Java Developer Guideの「AWS SDK for Java のセットアップ」を参照してください。

サンプルコードを実行する前に、AWS の認証情報を設定します。詳細については、『AWS SDK for Java Developer Guide』の「開発用の AWS 認証情報とリージョンのセットアップ」を参照してください。

キューにロングポーリングを設定するには

以下の Java コード例では、スタンダード キューが作成され、ロングポーリングがそのキューに設定されます。

/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * https://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. * */ import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.CreateQueueRequest; import com.amazonaws.services.sqs.model.QueueAttributeName; import java.util.Scanner; public class SQSLongPollingExample { public static void main(String[] args) { final Scanner input = new Scanner(System.in); System.out.print("Enter the queue name: "); final String queueName = input.nextLine(); System.out.print("Enter the ReceiveMessage wait time (1-20 seconds): "); final String receiveMessageWaitTime = input.nextLine(); /* * Create a new instance of the builder with all defaults (credentials * and region) set automatically. For more information, see * Creating Service Clients in the AWS SDK for Java Developer Guide. */ final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); try { // Create a queue with long polling. final CreateQueueRequest createQueueRequest = new CreateQueueRequest() .withQueueName(queueName) .addAttributesEntry(QueueAttributeName.ReceiveMessageWaitTimeSeconds .toString(), receiveMessageWaitTime); sqs.createQueue(createQueueRequest); System.out.println("Created queue " + queueName + " with " + "ReceiveMessage wait time set to " + receiveMessageWaitTime + " seconds."); } catch (final AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which means " + "your request made it to Amazon SQS, but was " + "rejected with an error response for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (final AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means " + "the client encountered a serious internal problem while " + "trying to communicate with Amazon SQS, such as not " + "being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } }

キューにロングポーリングを設定し、メッセージの送受信および削除を行うには

  1. スタンダード キューまたは FIFO キューのプログラム例をコピーします。

  2. キューの URL を取得する:

    final String queueUrl = sqs.getQueueUrl(queueName).getQueueUrl();
  3. 既存のキューにロングポーリングを設定するには、SetQueueAttributesRequest アクションを使用します。

    final SetQueueAttributesRequest setQueueAttributesRequest = new SetQueueAttributesRequest() .withQueueUrl(queueUrl) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); sqs.setQueueAttributes(setQueueAttributesRequest);
  4. メッセージ受信にロングポーリングを設定するには、ReceiveMessageRequest アクションを使用します。

    final ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(queueUrl) .withWaitTimeSeconds(20); sqs.receiveMessage(receive_request);
  5. プログラムをコンパイルして実行します。

    キューのロングポーリングを設定し、メッセージを送信、受信、削除できます。