我对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也有一个死信队列。
答案 0 :(得分:3)
如果您修改函数代码以在API调用失败时抛出Exception
,则Lambda / SQS集成会将其视为失败,并将消息放回队列中。
如果您希望将消息发送到DLQ之前多次重试,则还需要将Maximum receives
配置为大于1
的某个数字。
答案 1 :(得分:0)
如果外部API调用失败,则引发异常。