[英]how to receive message in aws sqs node js
我正在我的 Node js 项目中实现 sqs。 我正在做的是在 SQS 中发送 msg 并接收它。 但是当我收到它只是 ResponseMetadata 对象
"ResponseMetadata": {
"RequestId": "8659872b-10f0-57b6-9d57-d1852aba1a64"
}
没有消息对象作为响应。 我该怎么办? 我有很多可能性,例如更改参数值等,但没有任何效果。
我的代码
const AWS = require('aws-sdk');
AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: 'eu-west-1' })
const sqs = new AWS.SQS({apiVersion: '2012-11-05'});
onst queueUrl = "https://eu-west-1.queue.amazonaws.com/******/test-queue";
发送信息
let params = {
MessageBody: 'Hello world!',
MessageAttributes: {
"Title": {
DataType: "String",
StringValue: "The Whistler"
},
"Author": {
DataType: "String",
StringValue: "John Grisham"
},
"WeeksOn": {
DataType: "Number",
StringValue: "6"
}
},
QueueUrl: queueUrl,
DelaySeconds: 0
};
sqs.sendMessage(params, function (err, data) {
if (err) {
res.send(err);
} else {
res.send(data);
}
});
回应是
"ResponseMetadata": {
"RequestId": "da3af650-2642-5460-86b7-a0fe1f9ced6f"
},
"MD5OfMessageBody": "86fb269d190d2c85f6e0468ceca42a20",
"MD5OfMessageAttributes": "1864106991a54cca8b8c732a1841833a",
"MessageId": "13f228b0-7df1-4a9e-bc2b-48535725955e"
接收消息
sqs.getQueueUrl('queue-name', function(err, data) {
if (err) {
console.log("Error", err);
} else {
let params = {
AttributeNames: [
"SentTimestamp"
],
MaxNumberOfMessages: 10,
VisibilityTimeout: 20,
MessageAttributeNames: ["All"],
QueueUrl: data.QueueUrl,
WaitTimeSeconds: 0
};
sqs.receiveMessage(params, function (err, data) {
if (err) {
res.send(err);
} else {
res.send(data);
}
});
}
});
有人可以帮忙吗? 有什么我想念的吗? 谢谢是提前
getQueueUrl
调用不正确。 您需要将队列名称包装在这样的对象中
sqs.getQueueUrl({"QueueName": "queue name"}, function (err, data) {
此外,值得使用承诺版本而不是回调。
const data = sqs.getQueueUrl({"QueueName": "queue name"}).promise();
// Similary receiveMessage
您需要设置WaitTimeSeconds: 20
进行长轮询
sqs.getQueueUrl('queue-name', function (err, data) {
if (err) {
console.log("Error", err);
} else {
let params = {
AttributeNames: [
"SentTimestamp"
],
MaxNumberOfMessages: 10,
VisibilityTimeout: 20,
MessageAttributeNames: ["All"],
QueueUrl: data.QueueUrl,
WaitTimeSeconds: 20
};
sqs.receiveMessage(params, function (err, data) {
if (err) {
res.send(err);
} else {
res.send(data);
}
});
}
});
如果队列中的消息超过 1000 条,则需要将WaitTimeSeconds
设置为大于 0。默认值为 0。
在此处查看短轮询和长轮询之间的区别:
即使队列中有消息,短轮询也可能返回空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.