在 &SQS; 中管理可见性超时 - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

在 &SQS; 中管理可见性超时

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何指定队列接收的消息不可见的时间间隔。

情景

在此示例中,使用了 Node.js 模块来管理可见性超时。该 Node.js 模块使用 SDK for JavaScript,通过 AWS.SQS 客户端类的以下方法来管理可见性超时:

有关 Amazon SQS 可见性超时的更多信息,请参阅《Amazon Simple Queue Service Developer Guide》中的 Visibility Timeout

先决条件任务

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

更改可见性超时

创建文件名为 sqs_changingvisibility.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 Amazon Simple Queue Service,请创建一个 AWS.SQS 服务对象。从队列接收消息。

从队列收到消息时,创建一个包含设置超时所需的参数的 JSON 对象,其中包括消息所在的队列的 URL、收到消息时返回的 ReceiptHandle,以及新的超时(以秒为单位)。调用 changeMessageVisibility 方法。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region to us-west-2 AWS.config.update({ region: "us-west-2" }); // Create the SQS service object var sqs = new AWS.SQS({ apiVersion: "2012-11-05" }); var queueURL = "https://sqs.REGION.amazonaws.com/ACCOUNT-ID/QUEUE-NAME"; var params = { AttributeNames: ["SentTimestamp"], MaxNumberOfMessages: 1, MessageAttributeNames: ["All"], QueueUrl: queueURL, }; sqs.receiveMessage(params, function (err, data) { if (err) { console.log("Receive Error", err); } else { // Make sure we have a message if (data.Messages != null) { var visibilityParams = { QueueUrl: queueURL, ReceiptHandle: data.Messages[0].ReceiptHandle, VisibilityTimeout: 20, // 20 second timeout }; sqs.changeMessageVisibility(visibilityParams, function (err, data) { if (err) { console.log("Delete Error", err); } else { console.log("Timeout Changed", data); } }); } else { console.log("No messages to change"); } } });

要运行示例,请在命令行中键入以下内容。

node sqs_changingvisibility.js

此示例代码可在 GitHub 上的此处找到。