Ich habe einen S3-Bucket eingerichtet, um ein Ereignis auf dem PUT-Objekt an SQS zu senden, und ich handhabe die SQS-Warteschlange in einer EB-Arbeitsebene.Sendet SQS tatsächlich mehrere S3 PUT Objektdatensätze pro Nachricht?
Das Schema für die Nachricht, die SQS ist hier sendet: http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html
Records ist ein Array, was bedeutet, dass es in einem Post in meinem Arbeiter Endpunkt gesendet mehrere Datensätze sein. Passiert das tatsächlich? Oder erhält mein Mitarbeiter nur einen Datensatz pro Nachricht?
Der Sachbearbeiter kann nur eine Antwort zurückgeben, entweder 200 (Nachricht erfolgreich verarbeitet) oder nicht 200 (Nachricht wurde nicht erfolgreich verarbeitet, wodurch sie in die Warteschlange versetzt wird), unabhängig davon, wie viele Datensätze in der Nachricht empfangen werden.
Also, wenn mein Worker mehrere Datensätze in einer Nachricht empfängt und einige erfolgreich verarbeitet (sagen Sie etwas mit Nebenwirkungen wie das Einfügen in eine Datenbank), aber einen oder mehrere fehlschlägt, wie soll ich das behandeln? Wenn ich 200 zurückgebe, werden die fehlgeschlagenen nicht wiederholt. Aber wenn ich nicht-200 zurückgebe, werden diejenigen, die erfolgreich behandelt wurden, unnötigerweise erneut versucht und möglicherweise wieder eingefügt. Also müsste ich meinen Arbeiter schlau genug machen, nur die fehlgeschlagenen zu wiederholen - was Logik ist, würde ich lieber nicht schreiben wollen.
Dies wäre viel einfacher, wenn nur ein Datensatz je Nachricht gesendet wurde. Wenn das in der Praxis der Fall ist, würde ich das gerne wissen, auch wenn es sich bei den Aufzeichnungen um ein Array handelt.
Danke, das war hilfreich. Ich mag Ihren Ansatz, den Multiple-Records-Fall vorerst nicht zu behandeln, und schätze es, wenn Sie "mindestens einmal" ausrufen. – sandinmyjoints
_ "In jedem massiven und verteilten System wie SQS ist es extrem schwierig, absolut zu garantieren, dass dies niemals passieren kann" _ - Nur um zu verdeutlichen - es ist nicht nur "extrem schwierig", sondern aufgrund der verteilten Natur des Dienstes unmöglich. Siehe [this] (http://stackoverflow.com/a/38290017/836214) für einige Informationen zur Duplizierung. – Krease
@Krease mein Kommentar war eigentlich in Bezug auf die Einschränkungen auf das Design des Dienstes selbst - - nicht die Verbraucher des Dienstes. Es ist extrem schwierig, ein System * wie * SQS zu entwerfen, um keine Doppelungen zu garantieren, aber es ist nicht unmöglich ... eine solche Konsistenzgarantie würde jedoch einen Kompromiss in Bezug auf Verfügbarkeit und/oder Partitionstoleranz bedeuten und hätte wahrscheinlich ein Leistungseinbuße aufgrund erhöhter Kommunikation/Koordination zwischen den Servicekomponenten. Es kann jedoch nicht garantiert werden, dass für einen SQS-Verbraucher niemals eine doppelte Lieferung erfolgt. –