Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3) 的所有 API 操作。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon SQS 中管理可见性超时
此 Node.js 代码示例演示:
如何指定队列接收的消息不可见的时间间隔。
场景
在此示例中,使用了 Node.js 模块来管理可见性超时。Node.js 模块使用 SDK 通过使用SQS
客户端类的以下方法 JavaScript 来管理可见性超时:
有关 Amazon SQS 可见性超时的更多信息,请参阅 Amazon 简单队列服务开发人员指南中的可见性超时。
必备任务
要设置和运行此示例,您必须先完成以下任务:
-
设置项目环境以运行这些 Node TypeScript 示例,并安装所需的模块Amazon SDK for JavaScript和第三方模块。按照上的说明进行操作 GitHub
。 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证。
创建 Amazon SQS 队列。有关创建队列的示例,请参阅在 Amazon SQS 中使用队列。
将消息发送到队列。有关将消息发送到队列的示例,请参阅在 Amazon SQS 中发送和接收消息。
重要
这些示例演示如何使用 ecmascript6 (ES6) 导入/导出客户端服务对象和命令。
这需要 Node.js 版本 13.x 或更高版本。要下载并安装最新版本,请参阅 Node.js 下载。Node.js
。 如果你更喜欢使用 CommonJS 语法,请参阅JavaScript es6/CommonJS 语法。
更改可见性超时
创建一个libs
目录,然后使用文件名创建 Node.js 模块sqsClient.js
。将以下代码复制并粘贴到其中,这将创建 Amazon SQS 客户端对象。将区域
替换为您的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 };
可以在此处找到此
创建文件名为 sqs_changingvisibility.js
的 Node.js 模块。请确保按前面所示配置开发工具包。从队列接收消息。
从队列收到消息时,创建一个包含设置超时所需的参数的 JSON 对象,其中包括消息所在的队列的 URL、收到消息时返回的 ReceiptHandle
,以及新的超时(以秒为单位)。调用 ChangeMessageVisibilityCommand
方法。
注意
将 ACCOUN T_ID
替换为账户 ID,将 QUEUE_NAM
E 替换为队列名称。
// 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 { const visibilityParams = { QueueUrl: queueURL, ReceiptHandle: data.Messages[0].ReceiptHandle, VisibilityTimeout: 20, // 20 second timeout }; const results = await sqsClient.send( new ChangeMessageVisibilityCommand(visibilityParams) ); 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
可以在此处找到此