SQS ReceiveMessage成功,但收到空消息

时间:2018-10-23 02:39:22

标签: amazon-web-services aws-lambda amazon-sqs

我在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队列

1 个答案:

答案 0 :(得分:0)

using an SQS Queue as a Lambda event source时,Lambda服务的组件实际上会轮询队列并将消息有效负载传递给数组event.Records中的函数调用,该数组将包含来自队列的一个或多个消息。消息在队列中暂时不可见(它们正在“飞行中”)。

在此应用程序中,您无需直接与SQS进行交互。

您处理消息并成功退出Lambda函数,Lambda轮询器将自动将所有提供给您的消息从队列中删除。

如果引发异常,则您刚刚处理的所有消息都将重新设置为在队列中可见。