尝试从sqs触发我的lambda函数,它正在触发lambda,但队列中没有消息

时间:2019-09-12 10:35:53

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

我正在尝试从SQS延迟队列触发我的lambda函数,它正在触发lambda但队列中没有消息。即使在aws控制台上检查时,也会出现消息延迟,并且延迟时间结束了。它触发了我的lambda函数,但是当我的lambda尝试获取消息列表时,它显示为空列表。另一件事是,当我删除lambda触发器之后,每当我发送消息到队列中时,它都会显示在延迟时间之后可用的消息。因此,它没有向lambda添加触发器就可以按预期工作,但是当我添加触发器时,我的lambda没有收到任何要处理的消息。

我尝试了各种方法,但没有解决。我的默认可见性超时:30秒,接收消息等待时间:0秒,传递延迟:10秒。

使用以下代码从sqs获取消息,并且它始终返回空列表:

final ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(SQS_URL);
        final List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();

我是aws的新手,不知道该怎么办,因为这个问题陷入了僵局。请帮忙。

1 个答案:

答案 0 :(得分:3)

如果您已配置Amazon SQS队列来触发AWS Lambda函数,则该函数不应调用ReceiveMessage()

相反,消息是自动从SQS队列中提取的,并通过event参数传递给Lambda函数。

有关示例代码,请参见:Sample Amazon SQS Function Code - AWS Lambda

Lambda函数应遍历传递给该函数的消息。功能结束后,消息将自动删除。