簡體   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