将消息放回AWS SQS上,以处理由Lambda处理但内部失败的消息

时间:2020-09-19 16:00:00

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

我对SQS Lambda集成还很陌生,并试图了解我的用例的最佳方法。

我有一个SQS Lambda集成。我的Lambda函数正在从SQS接收消息,并调用外部API来处理消息。 Lambda函数一次将接收到一条消息,批处理大小设置为1。

    @Override
    public Void handleRequest(SQSEvent event, Context context) {
        Response response = null;
        if (event != null) {
            for (SQSMessage msg : event.getRecords()) {
                response = callXXXAPI(msg.getBody(), reqId, logger);
            }
        }
            return null;
    }

我正在寻找一种捕获来自外部API调用的任何错误响应,并将响应失败(非200状态)的消息放回队列的方法。这些失败的API消息当前不返回队列,因为它们被视为“已处理”。有没有办法用我当前的设置来做到这一点?推荐吗?

SQS也有一个死信队列。

2 个答案:

答案 0 :(得分:3)

如果您修改函数代码以在API调用失败时抛出Exception,则Lambda / SQS集成会将其视为失败,并将消息放回队列中。

如果您希望将消息发送到DLQ之前多次重试,则还需要将Maximum receives配置为大于1的某个数字。

答案 1 :(得分:0)

如果外部API调用失败,则引发异常。