在 Amazon SQS 中管理可见性超时 - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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

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

在 Amazon SQS 中管理可见性超时

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

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

场景

在此示例中,使用了 Node.js 模块来管理可见性超时。Node.js 模块使用适用于 JavaScript 的开发工具包通过SQS客户端类:

有关 Amazon SQS 可见性超时的更多信息,请参阅。可见性超时中的Amazon Simple Queue Service 开发者指南.

先决条件任

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

重要

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

更改可见性超时

创建libs创建文件名为的 Node.js 模块。sqsClient.js. 将下面的代码复制并粘贴到其中,这将创建 Amazon SQS 客户端对象。Replace领域和您的Amazon区域。

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_changingvisibility.js 的 Node.js 模块。请确保按前面所示配置开发工具包。从队列接收消息。

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

注意

替换和ACCOUNT_ID用账户的 ID 进行操作,QUEUE_NAME用队列的名称进行操作。

// Import required AWS SDK clients and commands for Node.js import { ReceiveMessageCommand, ChangeMessageVisibilityCommand, } from "@aws-sdk/client-sqs"; import { sqsClient } from "./libs/sqsClient.js"; // Set the parameters const queueURL = "https://sqs.REGION.amazonaws.com/ACCOUNT-ID/QUEUE-NAME"; // REGION, ACCOUNT_ID, QUEUE_NAME const params = { AttributeNames: ["SentTimestamp"], MaxNumberOfMessages: 1, MessageAttributeNames: ["All"], QueueUrl: queueURL, }; const run = async () => { try { const data = await sqsClient.send(new ReceiveMessageCommand(params)); if (data.Messages != null) { try { var visibilityParams = { QueueUrl: queueURL, ReceiptHandle: data.Messages[0].ReceiptHandle, VisibilityTimeout: 20, // 20 second timeout }; const results = await sqsClient.send( new ChangeMessageVisibilityCommand(params) ); console.log("Timeout Changed", results); } catch (err) { console.log("Delete Error", err); } } else { console.log("No messages to change"); } return data; // For unit tests. } catch (err) { console.log("Receive Error", err); } }; run();

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

node sqs_changingvisibility.js

可以找到这个示例代码GitHub 上的这里.