在 Amazon SQS 中发送和接收消息 - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon 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》中的 Sending a Message to an Amazon SQS QueueReceiving and Deleting a Message from an Amazon SQS Queue

先决条件任务

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

向队列发送消息

创建文件名为 sqs_sendmessage.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 Amazon SQS,请创建 AWS.SQS 服务对象。创建一个包含消息所需的参数的 JSON 对象,其中包括您要将此消息发送到的队列的 URL。在本示例中,消息提供了最畅销科幻小说排行榜中某本书籍的详细信息,包括书名、作者以及上榜周数。

调用 sendMessage 方法。回调函数将返回消息的唯一 ID。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create an SQS service object var sqs = new AWS.SQS({ apiVersion: "2012-11-05" }); var params = { // Remove DelaySeconds parameter and value for FIFO queues DelaySeconds: 10, MessageAttributes: { Title: { DataType: "String", StringValue: "The Whistler", }, Author: { DataType: "String", StringValue: "John Grisham", }, WeeksOn: { DataType: "Number", StringValue: "6", }, }, MessageBody: "Information about current NY Times fiction bestseller for week of 12/11/2016.", // MessageDeduplicationId: "TheWhistler", // Required for FIFO queues // MessageGroupId: "Group1", // Required for FIFO queues QueueUrl: "SQS_QUEUE_URL", }; sqs.sendMessage(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.MessageId); } });

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

node sqs_sendmessage.js

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

接收和删除来自队列的消息

创建文件名为 sqs_receivemessage.js 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 Amazon SQS,请创建 AWS.SQS 服务对象。创建一个包含消息所需的参数的 JSON 对象,其中包括您要用于接收消息的队列的 URL。在本示例中,参数指定所有消息属性的收件人,以及不超过 10 条消息的收件人。

调用 receiveMessage 方法。回调函数将返回 Message 对象的数组,从中您可以检索各个消息的 ReceiptHandle,您可在以后用来删除该消息。创建包含删除消息所需参数的另一个 JSON 对象,这些参数为队列的 URL 和 ReceiptHandle 值。调用 deleteMessage 方法以删除您收到的消息。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create an SQS service object var sqs = new AWS.SQS({ apiVersion: "2012-11-05" }); var queueURL = "SQS_QUEUE_URL"; var params = { AttributeNames: ["SentTimestamp"], MaxNumberOfMessages: 10, MessageAttributeNames: ["All"], QueueUrl: queueURL, VisibilityTimeout: 20, WaitTimeSeconds: 0, }; sqs.receiveMessage(params, function (err, data) { if (err) { console.log("Receive Error", err); } else if (data.Messages) { var deleteParams = { QueueUrl: queueURL, ReceiptHandle: data.Messages[0].ReceiptHandle, }; sqs.deleteMessage(deleteParams, function (err, data) { if (err) { console.log("Delete Error", err); } else { console.log("Message Deleted", data); } }); } });

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

node sqs_receivemessage.js

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