启用 &SQS; 中的长轮询 - AWS SDK for JavaScript

帮助我们改进AWS SDK for JavaScript版本 3 (V3) 文档,方法是使用反馈链接,或者在上创建议题或拉取请求GitHub.

这些区域有:AWS SDK for JavaScriptV3 API 参考指南详细描述了所有的 API 操作AWS SDK for JavaScript版本 3 (V3)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

启用 &SQS; 中的长轮询

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何为新创建的队列启用长轮询。

  • 如何为现有队列启用长轮询。

  • 如何在收到消息时启用长轮询。

场景

在发送响应之前,长轮询使 Amazon SQS 等待指定的时间,以便消息在队列中变得可用,从而减少空响应的数量。此外,长轮询通过查询所有服务器而不是执行服务器采样,消除了假的空响应。要启用长轮询,您必须为接收的消息指定非零等待时间。为此,您可以设置队列的 ReceiveMessageWaitTimeSeconds 参数或者设置在收到消息时的 WaitTimeSeconds 参数。

在本示例中,使用了一系列 Node.js 模块来启用长轮询。Node.js 模块使用软件开发工具包用于 JavaScript 使用以下方法来启用长轮询SQS客户端类:

有关 Amazon SQS 长轮询的更多信息,请参阅长轮询中的Amazon Simple Sueue.

先决条件任务

要设置和运行此示例,您必须先完成以下任务:

设置项目环境来运行这些 Node TypeScript 示例,并安装所需的AWS SDK for JavaScript和第三方模块。按照上的说明进行操作 GitHub.

注意

这些区域有:AWS SDK for JavaScript(V3) 是用写的 JavaScript,因此为了保持一致性,这些示例在 JavaScript. JavaScript 是一套超级套装 JavaScript 所以这些例子也可以在 JavaScript.

重要

这些示例演示了如何使用 ECMAScript6 (ES6) 导入/导出客户端服务对象和命令。

创建队列时启用长轮询

创建libs目录并创建文件名为模块文件名为模块 Node.jssqsClient.js. 将以下代码复制并粘贴到其中,这将创建 Amazon SQS 客户端对象。Replace领域此处AWS区域。

import { SQSClient } from "@aws-sdk/client-sqs"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SQS service object. const sqsClient = new SQSClient({ region: REGION }); export { sqsClient };

这个例子可以在以下网站找到下载内容:。此处 GitHub.

创建文件名为 sqs_longpolling_createqueue.js 的 Node.js 模块。请确保按前面所示配置开发工具包。创建一个包含创建队列所需的参数的 JSON 对象,其中包括 ReceiveMessageWaitTimeSeconds 参数的非零值。调用 CreateQueueCommand 方法。接下来为队列启用长轮询。

注意

替换和SQS_QUEUE_URLSQS 队列的 URL。

// Import required AWS SDK clients and commands for Node.js import { CreateQueueCommand } from "@aws-sdk/client-sqs"; import { sqsClient } from "./libs/sqsClient.js"; // Set the parameters const params = { QueueName: "SQS_QUEUE_NAME", //SQS_QUEUE_URL; e.g., 'https://sqs.REGION.amazonaws.com/ACCOUNT-ID/QUEUE-NAME' Attributes: { ReceiveMessageWaitTimeSeconds: "20", }, }; const run = async () => { try { const data = await sqsClient.send(new CreateQueueCommand(params)); console.log("Success", data); return data; // For unit tests. } catch (err) { console.error(err, err.stack); } }; run();

要运行示例,在命令提示符处,输入以下内容。

node sqs_longpolling_createqueue.js

这个例子可以在以下网站找到下载内容:。此处 GitHub.

启用对现有队列的长轮询

创建libs目录并创建文件名为模块文件名为模块 Node.jssqsClient.js. 将以下代码复制并粘贴到其中,这将创建 Amazon SQS 客户端对象。Replace领域此处AWS区域。

import { SQSClient } from "@aws-sdk/client-sqs"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SQS service object. const sqsClient = new SQSClient({ region: REGION }); export { sqsClient };

这个例子可以在以下网站找到下载内容:。此处 GitHub.

创建文件名为 sqs_longpolling_existingqueue.js 的 Node.js 模块。请确保按前面所示配置开发工具包。创建一个包含设置队列属性所需的参数的 JSON 对象,其中包括非零值ReceiveMessageWaitTimeSeconds参数和队列的 URL。调用 SetQueueAttributesCommand 方法。接下来为队列启用长轮询。

注意

ReplaceSQS_QUEUE_URLSQS 队列的 URL。ReceiveMessageWaitTimeSeconds表示收到消息前等待的秒数。

// Import required AWS SDK clients and commands for Node.js import { SetQueueAttributesCommand } from "@aws-sdk/client-sqs"; import { sqsClient } from "./libs/sqsClient.js"; // Set the parameters const params = { Attributes: { ReceiveMessageWaitTimeSeconds: "20", }, QueueUrl: "SQS_QUEUE_URL", //SQS_QUEUE_URL; e.g., 'https://sqs.REGION.amazonaws.com/ACCOUNT-ID/QUEUE-NAME' }; const run = async () => { try { const data = await sqsClient.send(new SetQueueAttributesCommand(params)); console.log("Success", data); return data; // For unit tests. } catch (err) { console.error(err, err.stack); } }; run();

要运行示例,在命令提示符处,输入以下内容。

node sqs_longpolling_existingqueue.js

这个例子可以在以下网站找到下载内容:。此处 GitHub.

启用对消息接收的长轮询

创建libs目录并创建文件名为模块文件名为模块 Node.jssqsClient.js. 将以下代码复制并粘贴到其中,这将创建 Amazon SQS 客户端对象。Replace领域此处AWS区域。

import { SQSClient } from "@aws-sdk/client-sqs"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create SQS service object. const sqsClient = new SQSClient({ region: REGION }); export { sqsClient };

这个例子可以在以下网站找到下载内容:。此处 GitHub.

创建文件名为 sqs_longpolling_receivemessage.js 的 Node.js 模块。请确保按前面所示配置开发工具包。创建一个包含接收消息所需的参数的 JSON 对象,其中包括 WaitTimeSeconds 参数的非零值和队列的 URL。调用 ReceiveMessageCommand 方法。

注意

ReplaceSQS_QUEUE_URLSQS 队列的 URL。MaxNumberOfMessages具有最大消息数量,和WaitTimeSeconds与等待时间(以秒为单位)。

// Import required AWS SDK clients and commands for Node.js import { ReceiveMessageCommand } from "@aws-sdk/client-sqs"; import { sqsClient } from "./libs/sqsClient.js"; // Set the parameters const queueURL = "SQS_QUEUE_URL"; // SQS_QUEUE_URL const params = { AttributeNames: ["SentTimestamp"], MaxNumberOfMessages: 1, MessageAttributeNames: ["All"], QueueUrl: queueURL, WaitTimeSeconds: 20, }; const run = async () => { try { const data = await sqsClient.send(new ReceiveMessageCommand(params)); console.log("Success, ", data); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

要运行示例,在命令提示符处,输入以下内容。

node sqs_longpolling_receivemessage.js

这个例子可以在以下网站找到下载内容:。此处 GitHub.