Amazon Simple Queue Service
開発者ガイド

チュートリアル: Amazon SQS 遅延キューを設定する

遅延キューを使用すると、キューへの新しいメッセージの配信を数秒延期することができます。遅延キューを作成した場合、キューに送信したメッセージはいずれも、遅延期間の間コンシューマーに表示されなくなります。The minimum delay for a queue is 0 seconds. The maximum is 15 minutes. このチュートリアルでは、AWS マネジメントコンソール または AWS SDK for Java を使用して遅延キューを設定する方法について説明します。詳細については、「Amazon SQS 遅延キュー」を参照してください。

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

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

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

  3. [Create New Queue] ページで、正しいリージョンにいることを確認してから、[Queue Name] を入力します。

    注記

    FIFO キューの名前は .fifo サフィックスで終わる必要があります。 FIFO キューは、米国東部(バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、および 欧州 (アイルランド) リージョンで使用できます。

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

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

  6. この例では、遅延キューを 1 分に設定します。

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

    1 分の遅延を使用するように設定された新しいキューが作成され、キューの一覧で選択されます。

    注記

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

    キューの [配信遅延] が [詳細] タブに表示されます。

AWS SDK for Java

サンプルコードでの作業を始める前に、AWS 認証情報を指定してください。詳細については、AWS SDK for Java Developer Guide開発用の AWS 認証情報とリージョンのセットアップを参照してください。

遅延キューを設定するには

前提条件

aws-java-sdk-sqs.jar パッケージを Java クラスパスに追加します。次の例では、この依存関係を Maven プロジェクトの pom.xml ファイルで示しています。

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sqs</artifactId> <version><replaceable>LATEST</replaceable></version> </dependency> </dependencies>

SQSDelayQueueExample.java

次の Java コード例では、スタンダード キューを作成し、遅延を 1 分に設定します。

/* * Copyright 2010-2018 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 com.amazonaws.services.sqs.model.SetQueueAttributesRequest; import java.util.Scanner; public class SQSDelayQueueExample { 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 delay in seconds (0 seconds to 15 minutes): "); final String queueDelay = 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. final CreateQueueRequest createQueueRequest = new CreateQueueRequest() .withQueueName(queueName); sqs.createQueue(createQueueRequest); // Set the delay for the queue. final String queueUrl = sqs.getQueueUrl(queueName) .getQueueUrl(); final SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(queueUrl) .addAttributesEntry(QueueAttributeName.DelaySeconds .toString(), queueDelay); sqs.setQueueAttributes(request); System.out.println("Created queue " + queueName + " with " + "delay set to " + queueDelay + " 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. 遅延キューを設定し、遅延値を秒単位で渡すには。

    // Set the delay for the queue. final String queueUrl = sqs.getQueueUrl(queueName).getQueueUrl(); final SetQueueAttributesRequest request = new SetQueueAttributesRequest() .withQueueUrl(queueUrl) .addAttributesEntry(QueueAttributeName.DelaySeconds.toString(), queueDelay); sqs.setQueueAttributes(request);
  3. プログラムをコンパイルして実行します。

    遅延キューを設定し、メッセージを送信、受信、削除できます。