2

Wir wechseln von einem Dienst für nicht stabile Nachrichtenwarteschlangen zu Google Pub Sub in NodeJS. Es scheint gut zu funktionieren, aber wir möchten Fehlerbehandlung einschließen.Google Cloud Pub/Sub Wiederholungsanzahl

Wir möchten die Anzahl der Wiederholungen für eine bestimmte Nachricht begrenzen, z. B. 10 Mal in unserer Testumgebung und 100 Mal in der Produktion. Wenn nun eine Nachricht 10 Mal (im Test) fehlschlägt, anstatt sie in unserer Warteschlange zu speichern und weiterhin verarbeitet wird und für 7 Tage fehlschlägt, möchten wir sie in eine separate Fehlerwarteschlange verschieben und uns eine E-Mail senden.

Wir haben dies zur Zeit in unserer vorherigen Nachrichtenwarteschlange eingerichtet, aber wir müssen das Attribut "Pub Sub Retry Count" von Google für jede Nachricht noch finden. Weiß jemand, ob das existiert?

Wir verwenden Aufgaben-Warteschlangen in Google App Engine und sie haben alles, was wir brauchen würden, aber Googles Pub-Sub scheint viel zu fehlen. Wir benötigen irgendeine Lösung, um in Node zu sein.

Antwort

0

In Python finden Sie in dem Parameter 'num_retries' auf .execute():

pubsub_client.projects().topics().publish(topic='projects/xxxx',body=body).execute(num_retries=0)

nicht sicher, ob die gleiche Sache in Node.JS existiert, aber ich hoffe, dass diese Punkte, die Sie in der richtigen Richtung .

+0

Hallo Aerodyno, das hat mich super aufgeregt. Ich sah es auch in den Python-Dokumenten, aber als wir uns das Github für Python und NodeJS ansahen, wurde es überhaupt nicht implementiert oder dokumentiert. –

+2

Die Eigenschaft num_retries beeinflusst die Häufigkeit, mit der die Veröffentlichung bei einem Fehler wiederholt wird, z. B. wenn der Publisher aus irgendeinem Grund Cloud Pub/Sub nicht erreichen kann. Die Anzahl der Zustellungen von Nachrichten an Abonnenten wird nicht beeinflusst, wenn der Abonnent die Nachricht nicht verarbeiten und bestätigen kann. –

5

Cloud Pub/Sub hat keine Begrenzung für die Anzahl der Wiederholungen der Zustellung einer Nachricht an einen Abonnenten. Wenn Ihr Abonnent die Nachricht innerhalb der Bestätigungsfrist nicht bestätigt, wird sie erneut zugestellt, bis die Nachricht 7 Tage später abläuft.

Wenn Sie diese Nachrichten nicht mehr empfangen möchten, müssen Sie sie an einem bestimmten Punkt quittieren. Wenn Sie gegen „-Nachrichten des Todes“ schützen wollen, die nicht durch Ihre Abonnenten verarbeitet werden können, empfehle ich folgendes:

  1. Behalte Nachrichtenfehlerzählungen in einer Datenbank, die von der Nachrichten-ID eingegeben. Es ist zu hoffen, dass Fehler nicht häufig auftreten, daher sollte diese Datenbank nicht zu groß sein und Abfragen an sie werden nur durchgeführt, wenn tatsächlich ein Fehler auftritt.

  2. Wenn eine Nachricht fehlschlägt, Abfrage der Datenbank und sehen, wie viele Fehler zuvor aufgetreten sind. Erhöhen Sie den Zähler und bestätigen Sie die Meldung nicht, wenn die Anzahl unter Ihrem Schwellenwert liegt.

  3. Wenn eine Nachricht häufiger als Ihr Schwellenwert fehlschlägt, veröffentlichen Sie die Nachricht in einem separaten Thema "fehlgeschlagene Nachrichten", senden Sie eine E-Mail und bestätigen Sie die Nachricht.

  4. Bei Bedarf können Sie Nachrichten vom Thema "fehlgeschlagene Nachrichten" zurück zum Hauptthema veröffentlichen, wenn die Probleme behoben wurden, die zum Fehlschlagen der Nachricht geführt haben.

Sie haben nun die Nachricht in einem separaten Thema gespeichert (für 7 Tage oder bis Sie es ack) und die Nachricht wird nicht an die Abonnenten auf Ihrem Hauptthema nachgeliefert werden.

+0

Danke für die Antwort Kamal. Ich denke, Ihre Antwort würde funktionieren, wir werden es ein wenig anders umsetzen. Da das Zählen von Nachrichtenfehlern in einer Datenbank wie nutzlose Informationen erscheint, insbesondere wenn die eigentliche Nachricht verschwindet, speichern wir ein Enqueue- oder Veröffentlichungsdatum für jedes Objekt. Wenn das Objekt für einen Tag oder länger im Thema verbleibt, fügen wir die Nachricht zur Datenbank hinzu und bestätigen/entfernen sie aus dem Thema. Dies ermöglicht uns, die Protokolle zu beruhigen, die Anzahl der Wiederholungen zu begrenzen und die Nachricht, die fehlgeschlagen ist, sichtbar und länger als 7 Tage verfügbar zu haben. –

+0

Uns ist klar, dass Aufgabenwarteschlangen in App Engine perfekt wären, aber für Node nicht unterstützt werden. Danke nochmal für die Antwort! –

+0

Aufgaben Warteschlangen in Appengine hat eine REST API (immer noch mit Beta-Label) https://cloud.google.com/appengine/docs/python/taskqueue/rest/ – marcadian