Amazon SQS でのロングポーリングの有効化 - AWS SDK for JavaScript

AWS SDK for JavaScript v2 のサポート終了が間近に迫っていることが発表されています。AWS SDK for JavaScript v3 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

Amazon SQS でのロングポーリングの有効化

JavaScript code example that applies to Node.js execution

この Node.js コード例は以下を示しています。

  • 新しく作成されたキューでロングポーリングを有効にする方法

  • 既存のキューでロングポーリングを有効にする方法

  • メッセージの受信時にロングポーリングを有効にする方法

シナリオ

ロングポーリングは、レスポンスの送信前にメッセージがキューで使用可能になるまで Amazon SQS が指定された時間待機できるようにすることで、空のレスポンス数を削減します。また、ロングポーリングでは、サーバーをサンプリングするのではなくすべてのサーバーをクエリすることによって、偽の空のレスポンスが排除されます。ロングポーリングを有効にするには、受信したメッセージについてゼロ以外の待機時間を指定する必要があります。これを行うには、キューの ReceiveMessageWaitTimeSeconds パラメータを設定するか、または受信時のメッセージの WaitTimeSeconds パラメータを設定します。

この例では、一連の Node.js モジュールはロングポーリングの有効化に使用されます。Node.js モジュールは SDK for JavaScript を使用して、AWS.SQS クライアントクラスの以下のメソッドを使用してロングポーリングを有効にします。

Amazon SQS ロングポーリングの詳細については、Amazon Simple Queue Service デベロッパーガイドロングポーリングを参照してください。

前提条件タスク

この例をセットアップして実行するには、まず次のタスクを完了する必要があります。

キュー作成時のロングポーリングの有効化

sqs_longpolling_createqueue.js というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。Amazon SQS にアクセスするには、AWS.SQS サービスオブジェクトを作成します。キューの作成に必要なパラメータを含む JSON オブジェクトを作成します。これには、ReceiveMessageWaitTimeSeconds パラメータのゼロ以外の値が含まれます。createQueue メソッドを呼び出します。これで、キューに対してロングポーリングが有効になります。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the SQS service object var sqs = new AWS.SQS({ apiVersion: "2012-11-05" }); var params = { QueueName: "SQS_QUEUE_NAME", Attributes: { ReceiveMessageWaitTimeSeconds: "20", }, }; sqs.createQueue(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.QueueUrl); } });

この例を実行するには、コマンドラインに次のように入力します。

node sqs_longpolling_createqueue.js

このサンプルコードは、このGitHubにあります。

既存のキューでロングポーリングを有効にする

sqs_longpolling_existingqueue.js というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。Amazon Simple Queue Service にアクセスするには、AWS.SQS サービスオブジェクトを作成します。キューの属性を設定するために必要なパラメータを含む JSON オブジェクトを作成します。これには、ReceiveMessageWaitTimeSeconds パラメータのゼロ以外の値と、キューの URL が含まれます。setQueueAttributes メソッドを呼び出します。これで、キューに対してロングポーリングが有効になります。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the SQS service object var sqs = new AWS.SQS({ apiVersion: "2012-11-05" }); var params = { Attributes: { ReceiveMessageWaitTimeSeconds: "20", }, QueueUrl: "SQS_QUEUE_URL", }; sqs.setQueueAttributes(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data); } });

この例を実行するには、コマンドラインに次のように入力します。

node sqs_longpolling_existingqueue.js

このサンプルコードは、このGitHubにあります。

メッセージ受信時のロングポーリングを有効にする

sqs_longpolling_receivemessage.js というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。Amazon Simple Queue Service にアクセスするには、AWS.SQS サービスオブジェクトを作成します。メッセージの受信に必要なパラメータを含む JSON オブジェクトを作成します。これには、WaitTimeSeconds パラメータのゼロ以外の値と、キューの URL が含まれます。receiveMessage メソッドを呼び出します。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create the SQS service object var sqs = new AWS.SQS({ apiVersion: "2012-11-05" }); var queueURL = "SQS_QUEUE_URL"; var params = { AttributeNames: ["SentTimestamp"], MaxNumberOfMessages: 1, MessageAttributeNames: ["All"], QueueUrl: queueURL, WaitTimeSeconds: 20, }; sqs.receiveMessage(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data); } });

この例を実行するには、コマンドラインに次のように入力します。

node sqs_longpolling_receivemessage.js

このサンプルコードは、このGitHubにあります。