SQS 真的会为每条消息发送多个 S3 PUT 对象记录吗?

2024-01-30

我已经设置了一个 S3 存储桶来将 PUT 对象上的事件发送到 SQS,并且我正在 EB 工作层中处理 SQS 队列。

SQS 发送的消息的架构如下:http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-struct.html http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

Records 是一个数组,这意味着在一个 POST 中可以有多个记录发送到我的工作人员端点。这真的会发生吗?或者我的工作人员每条消息只会收到一条记录?

Worker 只能返回一个响应,要么是 200(消息处理成功),要么是非 200(消息未成功处理,将其放回到队列中),无论它收到的消息中有多少条记录。

因此,如果我的工作人员在一条消息中收到多条记录,并且它成功处理了一些记录(例如通过执行一些具有副作用的操作,例如插入数据库),但在一条或多条记录上失败,我应该如何处理?如果我返回200,那么失败的就不会重试。但如果我返回非 200,那么成功处理的那些将不必要地重试,并且可能会重新插入。所以我必须让我的工作人员足够聪明,只重试失败的工作——这是我不想写的逻辑。

如果每条消息只发送一条记录,这会容易得多。因此,如果实践中是这种情况,尽管记录是一个数组,我真的很想知道!


需要明确的是,“SQS 发送”的不是记录。正是这些记录S3 发送至SQS(或 SNS、Lambda)。

目前,所有 S3 事件通知的每条通知消息都有一个事件。当我们将来添加新的事件类型时,我们可能会包含多个记录。这也是其他 AWS 服务共享的消息格式,其他服务可以包含多个记录。

https://forums.aws.amazon.com/thread.jspa?messageID=592264 https://forums.aws.amazon.com/thread.jspa?messageID=592264

因此,目前看来每条消息只有一条记录。

但是...如果您认为您的应用程序不需要准备好处理重复或重复的消息,那么您就犯了一个错误。在任何像 SQS 这样的大型分布式系统中,无论多么不可能,都很难绝对保证这种情况永远不会发生:

问:每条消息我会收到多少次?

Amazon SQS 旨在提供队列中所有消息的“至少一次”传送。尽管大多数情况下,每条消息都会准确地传递到您的应用程序一次,但您应该设计系统,以便多次处理消息不会产生任何错误或不一致。

http://aws.amazon.com/sqs/faqs/ http://aws.amazon.com/sqs/faqs/

顺便说一句,在我的平台中,记录数组中的多个条目被视为错误,导致消息被放弃并发送到死信队列 https://aws.amazon.com/blogs/aws/amazon-sqs-new-dead-letter-queue/供审查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQS 真的会为每条消息发送多个 S3 PUT 对象记录吗? 的相关文章

随机推荐