【发布时间】:2020-03-20 03:38:42
【问题描述】:
我尝试从 SQS 队列(不是 FIFO)中提取消息,但它不起作用。我有一个 Lambda 在 DynamoDB 中写入一个值,触发另一个 Lambda 创建 SQS 消息。然后,我创建了一个具有 ReceiveMessage、GetQueueAttributes 和 DeleteMessage 权限的 Lambda 函数,并在 SQS 中添加了一个“Lambda 函数触发器”,授予我的新 lambda 函数权限。每当将条目添加到数据库时,都会触发我的最后一个 lambda 函数,因此触发器似乎可以工作。当我尝试使用 sqs.receivemessage(...) 获取条目时,它会等到 WaitTimeSeconds 周期过去,然后我会收到这样的答案:
{
"ResponseMetadata": {
"RequestId": "b1e34ce3-9003-5c00-a3d8-1ab75ba132b8"
}
}
很遗憾,没有添加 Message 对象。我还尝试将这个调用包装在一个循环中,以便按照其他页面上的建议连续尝试几次,但不幸的是,他一直运行到超时,而我没有收到消息。当 lambda 运行时,我可以在“飞行中的消息”列表中看到该消息。
我尝试修改超时,调用函数的方式并搜索了很多,但不幸的是我仍然没有收到任何消息。
有什么想法吗?
这是我的代码:
'use strict';
var AWS = require("aws-sdk");
AWS.config.update({region: 'eu-central-1'});
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
exports.handler =(event, context, callback) => {
var params = {
QueueUrl: 'https://sqs.eu-central-1.amazonaws.com/476423085846/email',
AttributeNames: ['All'],
MaxNumberOfMessages: 5,
MessageAttributeNames: [
'email',
'hash'
],
WaitTimeSeconds: 10
};
sqs.receiveMessage(params, function(err, data) {
if (err)
{
console.log(err, err.stack); // an error occurred
}
else
{
console.info('DATA\n'+JSON.stringify(data));
}
}
}
我的 SQS 设置:
默认可见性超时:5 分钟, 消息保留期:4天, 最大消息大小:256kb(我的消息应该更小), 交货延迟:0秒, 接收消息等待时间:10秒
提前致谢:)
问候克里斯蒂安
【问题讨论】:
标签: javascript amazon-web-services aws-lambda amazon-sqs