繁体   English   中英

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

[英]Does SQS really send multiple S3 PUT object records per message?

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

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

记录是一个数组,意味着可以在一个POST中将多个记录发送到我的工作人员的端点。 这实际发生了吗? 或者我的工作人员每封邮件只会收到一条记录吗?

无论收到的消息中有多少记录,工作者只能返回一个响应,200(成功处理消息)或非200(消息未成功处理,将其重新放入队列)。

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

如果每封邮件只发送一条记录,这将更容易。 所以,如果实际情况如此,尽管记录是阵列,我真的很想知道!

要清楚,这不是“SQS发送”的记录。 这是S3发送给 SQS(或SNS或Lambda)的记录。

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

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

所以,目前看来每封邮件只有一条记录。

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

问:我会收到多少次邮件?

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

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

顺便说一句,在我的平台中,记录数组中的多个条目被视为错误,导致该消息被放弃并发送到死信队列以供查看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM