我在lambda中有以下代码来接收SQS消息: 当我将消息注入SQS时,lambda会触发,但表示 data.Messages 为空。
function receiveMessages(callback)
{
var params = {
QueueUrl: TASK_QUEUE_URL,
MaxNumberOfMessages: 2,
WaitTimeSeconds: 1,
AttributeNames: ["All"]
};
SQS.receiveMessage(params, function(err, data)
{
if (err)
{
console.error(err, err.stack);
callback(err);
}
else if (data.Messages == null)
{
console.log("null message", data);
callback(null,null);
}
else
{
callback(null, data.Messages);
}
});
}
我可能做错了并不明显。我同时尝试了fifo和非fifo队列
答案 0 :(得分:0)
当using an SQS Queue as a Lambda event source时,Lambda服务的组件实际上会轮询队列并将消息有效负载传递给数组event.Records
中的函数调用,该数组将包含来自队列的一个或多个消息。消息在队列中暂时不可见(它们正在“飞行中”)。
在此应用程序中,您无需直接与SQS进行交互。
您处理消息并成功退出Lambda函数,Lambda轮询器将自动将所有提供给您的消息从队列中删除。
如果引发异常,则您刚刚处理的所有消息都将重新设置为在队列中可见。