Wie, um Nachrichten zu empfangen, zählen in Amazon SQS verwenden boto Bibliothek in Python?
Ich bin mit boto Bibliothek in Python zu bekommen, Amazon SQS-Nachrichten. In Ausnahmefällen, die ich nicht löschen von Nachrichten aus der Warteschlange aus, um ein paar mehr änderungen, wiederherstellen temporäre Ausfälle. Aber ich will nicht zu halten, empfangen fehlgeschlagen-Meldungen ständig. Was ich tun möchte ist entweder Sie löschen die Nachrichten nach dem Empfang mehr als 3 mal oder nicht, erhalten Sie Nachricht erhalten, wenn count größer ist als 3.
Was ist der eleganteste Weg, es zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zumindest ein paar Möglichkeiten, dies zu tun.
Wenn Sie eine Nachricht Lesen, in boto, erhalten Sie ein Message-Objekt oder einige Unterklasse davon. Das Message-Objekt hat ein "Attribute" - Feld, das ist ein dict mit allen message-Attribute bekannt durch die SQS. Eines der Dinge, die SQS-tracks ist die Ungefähre Anzahl der Zeiten, die Nachricht wurde gelesen. So, könnten Sie diesen Wert verwenden, um zu bestimmen, ob die Nachricht gelöscht werden soll oder nicht, aber Sie müssen bequem sein mit der "Ungefähre" Natur des Wertes.
Alternativ können Sie die Aufnahme-message-ID ' s in einer Art Datenbank und die Schrittweite ein count-Feld in der Datenbank jedes mal, wenn Sie die Nachricht Lesen. Dies könnte geschehen in einem einfachen Python dict, wenn die Nachrichten werden immer gelesen wird, innerhalb eines einzelnen Prozesses oder es getan werden könnte, in so etwas wie SimpleDB, wenn Sie brauchen, um Messwerte aufzuzeichnen, der über Prozesse.
Hoffe, das hilft.
Hier einige Beispiel-code:
Anderen Weg sein könnte, können Sie einen zusätzlichen Kennung am Ende der Nachricht in Ihrem SQS-Warteschlange. Diese Kennung kann halten Sie die Anzahl der Zeiten, die die Nachricht gelesen wurde.
Auch, wenn Sie möchten, dass Ihr Dienst sollte nicht Umfrage diese Nachricht wieder und wieder, dann können Sie eine weitere Warteschlange sagen, "Dead Message Queue", und kann dann die Nachricht hat die Schwelle in diese Warteschlange.
aws hat eingebaute Unterstützung für diese, Folgen Sie einfach den unten aufgeführten Schritte:
Wie es funktioniert, ist, wenn eine Nachricht empfangen wird, die der Arbeitnehmer, die erhalten count inkrementiert. Sobald es erreicht "Maximum Erhält" zählen, wird die Nachricht gedrückt, um die dead letter-Warteschlange. Beachten Sie, auch wenn Sie auf die Nachricht über die aws-Konsole, die erhalten count inkrementiert.
Quelle Die Verwendung von Amazon SQS Dead Letter-Warteschlange
Sollte es in wenigen Schritten durchgeführt werden.
sqsconnrec = SQSConnection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
request_q = sqsconnrec.create_queue("queue_Name")
Nachrichten= request_q.get_messages()
nur tun, len(Nachrichten)
sollten arbeiten wie Charme.
Bekommen ApproximateReceiveCount Attribut von Nachricht, die Sie Lesen.
verschieben Sie es an eine andere Warteschlange(als Sie verwalten können, Fehlermeldungen) oder löschen Sie es einfach.