AWS - SQS 并发
AWS - SQS concurrency
一个关于SQS消息并发的小问题
场景:
我创建了 3 分钟超时的 lambda。
此 lambda 由 SQS 服务触发(使用默认配置)。
当 SQS 触发我的 lambda 时,他等待 X 秒(不到 3 分钟)。
等待之后,他 运行 再次使用相同的 lambda。
现在,我同时有两个 lambda 运行。
对于这种情况,最后 - lambda_1 失败,lambda_2 成功。
问题:
SQS 消息从队列中删除了吗?
成功的 lambda 从队列中删除消息。
失败的 lambda 重试此消息。
以及如何控制并发问题?
谢谢。
要从队列中删除 SQS 消息,lambda 必须在成功处理后显式 delete 从队列中删除它。 (<- 这是不正确的,请参阅下面的编辑)。
如果 lambda 在处理消息时失败,消息将在 message visibility 超时结束后返回到队列(默认为 30 秒)。这样,它就有机会再次被lambda处理。
在您的 SQS 队列设置中,您可以设置 Dead-Letter Queues 来存储尝试成功处理失败的消息。
编辑:
正如@michael-sqlbot 正确指出的那样,我回答的第一部分不正确。当您的函数成功处理一批时,Lambda 将从队列中删除它的消息。
要控制 lambda 并发使用 Reserved Concurrency 设置。
一个关于SQS消息并发的小问题
场景:
我创建了 3 分钟超时的 lambda。
此 lambda 由 SQS 服务触发(使用默认配置)。
当 SQS 触发我的 lambda 时,他等待 X 秒(不到 3 分钟)。
等待之后,他 运行 再次使用相同的 lambda。
现在,我同时有两个 lambda 运行。
对于这种情况,最后 - lambda_1 失败,lambda_2 成功。
问题:
SQS 消息从队列中删除了吗?
成功的 lambda 从队列中删除消息。
失败的 lambda 重试此消息。
以及如何控制并发问题?
谢谢。
要从队列中删除 SQS 消息,lambda 必须在成功处理后显式 delete 从队列中删除它。 (<- 这是不正确的,请参阅下面的编辑)。
如果 lambda 在处理消息时失败,消息将在 message visibility 超时结束后返回到队列(默认为 30 秒)。这样,它就有机会再次被lambda处理。
在您的 SQS 队列设置中,您可以设置 Dead-Letter Queues 来存储尝试成功处理失败的消息。
编辑:
正如@michael-sqlbot 正确指出的那样,我回答的第一部分不正确。当您的函数成功处理一批时,Lambda 将从队列中删除它的消息。
要控制 lambda 并发使用 Reserved Concurrency 设置。