将消息放回 AWS SQS,用于 Lambda 处理但内部失败的消息
Putting back messages on AWS SQS, for messages processed by Lambda but failed internally
我对 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 也有一个死信队列。
如果您修改函数代码以在 API 调用失败时抛出 Exception
,Lambda/SQS 集成会将其视为失败并将消息放回队列中.
如果您希望在将消息发送到 DLQ 之前重试多次,您还需要将 Maximum receives
配置为大于 1
的某个数字。
如果外部 API 调用失败则抛出异常。
我对 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 也有一个死信队列。
如果您修改函数代码以在 API 调用失败时抛出 Exception
,Lambda/SQS 集成会将其视为失败并将消息放回队列中.
如果您希望在将消息发送到 DLQ 之前重试多次,您还需要将 Maximum receives
配置为大于 1
的某个数字。
如果外部 API 调用失败则抛出异常。