2017-10-18 3 views
3

steuern Grundsätzlich habe ich eine Cloud-Funktion erstellt (geschrieben ein Node.js Code), die auf die Nachricht von Cloud Pubsub Thema ausgelöst wird und diese Daten in Bigquery-Tabelle laden.Wie kann ich Quittierung in Cloud PubSub mit Node.js

Eine Nachricht in einem Thema wird gelöscht, nachdem sie von der Cloud-Funktion gelesen wurde. Ich verstehe, dass Teilnehmer intern Bestätigung und Ergebnis davon sendet, Nachricht wird vom Thema gelöscht.

Ich möchte die Bestätigung an den Herausgeber gesendet steuern. Wie kann es erreicht werden, fand kein Dokument zu diesem Thema.

+0

Machst du das manuell oder verwendest du eine der Googels-Client-Bibliotheken? Die Client-Bibliotheken sind so konzipiert, dass sie selbst zurücksenden. Ich denke, dass Sie sehen müssen, ob es eine Möglichkeit gibt, das zu deaktivieren. – DaImTo

Antwort

0

Mit Google Cloud-Funktionen können Sie die Bestätigung der Cloud Pub/Sub-Nachricht nicht steuern. Nach Beendigung der Funktion wird die Nachricht für das Abonnement bestätigt. Wenn Sie feinere Kontrolle über Bestätigungen haben möchten, müssen Sie Google Cloud Pub/Sub direkt verwenden. Es gibt eine Node.js client library.

Nur einige Erläuterungen zu Bestätigungen: Das Bestätigen einer Nachricht für ein einzelnes Abonnement bedeutet nicht, dass die Nachricht für das Thema gelöscht wird, sondern nur für das Abonnement. Andere unabhängige Abonnements erhalten weiterhin die Nachricht und müssen sie bestätigen. Dies ist auch unabhängig von der Bestätigung, die an den Herausgeber gesendet wird. Wenn eine Google Cloud Pub/Sub-Nachricht veröffentlicht wird, wird der Veröffentlichungsanruf bestätigt (d. H. Eine Antwort wird an den Publisher gesendet), sobald Google Cloud Pub/Sub die Nachricht gespeichert hat und garantiert, dass sie an Abonnements übermittelt wird. Dies ist einer der Hauptvorteile eines asynchronen Nachrichtenübermittlungssystems: das Empfangen der Nachricht vom Herausgeber (und das Bestätigen des Veröffentlichens) ist unabhängig von der Zustellung der Nachricht über eine Subskription (die vom Abonnenten separat bestätigt wird).

+0

Danke Kamal für die Erklärung. In Bezug auf Ihre Notizen auf Bestätigungen: Wenn ich 3 Abonnement für das Thema und eine der Teilnehmer haben keine Bestätigung gesendet (Wie Sie Kommentar, Nachricht wird nicht aus Thema gelöscht) dann können andere zwei Abonnenten wieder die gleiche Nachricht von diesem Thema lesen? – Shawn

+0

Wenn eine einzige Subskription die Nachricht nicht bestätigt hat, sollte nur diese Subskription die Nachricht erneut erhalten (mit dem Vorbehalt, dass Pub/Sub mindestens einmal im Allgemeinen ausgeliefert wird). Bestätigungen von Nachrichten sind _per subscription_. –

+0

@kamal haben wir festgestellt, dass der [node.js pubsub-Client] (https://github.com/googleapis/nodejs-pubsub) nicht gut mit Cloud-Funktionen funktioniert, da er Bestätigungen im Hintergrund sendet ([Tabu für Cloud-Funktionen]) (https://cloud.google.com/functions/docs/bestpractices/tips#do_not_start_background_activities)) und versucht, Verbindungen wiederzuverwenden. Siehe [meine SO-Frage] (https://stackoverflow.com/q/48623991/880509). – codyzu

0

Die einzige Möglichkeit, zuverlässig zu steuern, welche Nachrichten quittiert werden und nicht in einer Cloud-Funktion sind, ist die REST Service APIs.

Dies ist, weil die node.js pubsub client Dienste Bestätigungen und verwaltet Verbindungen im Hintergrund. Dies ist clearly forbidden in a cloud function.

Die REST-APIs sind jedoch relativ einfach zu verwenden und bieten eine genaue Kontrolle darüber, welche Nachrichten bestätigt werden.

Verwandte Themen