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

Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3) 的所有 API 操作。

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

在 Amazon SQS 中管理可见性超时

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

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

场景

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

有关 Amazon SQS 可见性超时的更多信息,请参阅 Amazon 简单队列服务开发人员指南中的可见性超时。

必备任务

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

重要

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

更改可见性超时

创建一个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 };

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

创建文件名为 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

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