Auf dieser Seite wird erläutert, wie Sie Nachrichten mit genau einmalem Senden empfangen und bestätigen. Semantik. Nur der Pull-Abotyp unterstützt die genau einmalige Zustellung, einschließlich Abonnenten, die das StreamingPull API
Abos per Push übertragen und exportieren unterstützen keine genau einmalige Zustellung.
Empfohlene Versionen der Clientbibliothek
- Für eine optimale Leistung sollten Sie die neueste Version der Clientbibliothek (Python) verwenden. Version 2.13.6 oder höher, Java Version 1.120.11 oder höher, PHP Version 1.39.0 oder höher, C# Version 3.2.0 oder höher, C++ v2.1.0, Los Version 1.25.1 oder höher, Knoten Version 3.2.0 oder höher und Rubin Version 2.12.1 oder höher.
Genau einmalige Zustellung
Pub/Sub unterstützt die genau einmalige Zustellung innerhalb einer Cloud-Region, basierend auf einer von Pub/Sub definierten eindeutigen Nachrichten-ID.
Wenn das Feature aktiviert ist, bietet Pub/Sub Folgendes:
Nachdem die Nachricht erfolgreich bestätigt wurde, erfolgt keine erneute Zustellung.
Solange eine Nachricht aussteht, erfolgt keine erneute Zustellung. Eine Nachricht wird als ausstehend, bis die Bestätigungsfrist abläuft oder die Nachricht bestätigt.
Bei mehreren gültigen Lieferungen aufgrund der Bestätigungsfrist oder vom Kunden initiierte negative Bestätigung, Bestätigungs-ID verwendet werden, um die Nachricht zu bestätigen. Alle Anfragen mit eine vorherige Bestätigungs-ID fehlschlägt.
Erneute Auslieferung und Duplikate
Es ist wichtig, den Unterschied zwischen erwartet und unerwartet zu verstehen. erneute Sendungen.
Erneute Auslieferungen können durch eine vom Kunden ausgelöste negative Bestätigung einer Nachricht oder wenn der Client die Bestätigung nicht verlängert Frist der Nachricht vor Ablauf der Bestätigungsfrist. Erneute Sendungen als gültig betrachtet werden und das System wie vorgesehen funktioniert.
Informationen zur Fehlerbehebung bei erneuten Übermittlungen finden Sie unter Umgang mit Duplikaten.
Ein Duplikat liegt vor, wenn eine Nachricht nach einer erfolgreichen Bestätigung noch einmal gesendet wird. oder vor Ablauf der Bestätigungsfrist.
Eine noch einmal zugestellte Nachricht behält dieselbe Nachrichten-ID zwischen mehreren Versuchen für die Zustellung.
Abos, bei denen die genau einmalige Zustellung aktiviert ist, werden nicht dupliziert Lieferungen.
Unterstützung der genau einmaligen Zustellung in Clientbibliotheken
Unterstützte Clientbibliotheken haben eine Schnittstelle für die Bestätigung mit Antwort Beispiel: Go. Über diese Schnittstelle können Sie prüfen, ob die Bestätigungsanfrage erfolgreich war. Wenn die Bestätigungsanfrage erfolgreich ist, werden die Clients keine erneute Übermittlung. Wenn die Bestätigungsanfrage fehlschlägt, können Kunden mit einer erneuten Lieferung rechnen.
Clients können die unterstützten Clientbibliotheken auch ohne die Bestätigungsschnittstelle. In solchen Fällen Fehler bei der Bestätigung können dazu führen, dass Nachrichten im Hintergrund noch einmal gesendet werden.
Unterstützte Clientbibliotheken haben Schnittstellen zum Festlegen des Minimums Zeitverlängerung für die Freigabe (Beispiel: Go. Sie müssen den Wert für die Mindest-Lease-Verlängerung auf eine hohe Zahl setzen. um den Ablauf von netzwerkbezogenen Bestätigungen zu vermeiden. Der Höchstwert wird auf 600 Sekunden festgelegt.
Standardwerte und Bereich für die Variablen, die sich auf die genau einmalige Zustellung beziehen und die Namen der Variablen können sich je nach Clientbibliothek unterscheiden. Für Beispiel: In der Java-Clientbibliothek steuern die folgenden Variablen genau einmalige Zustellung.
Variable | Beschreibung | Wert |
---|---|---|
setEnableExactlyOnceDelivery |
Aktiviert oder deaktiviert die genau einmalige Zustellung. | true oder false Default=false |
minDurationPerAckExtension |
Die Mindestzeit in Sekunden, die zum Verlängern des Zeitlimits für Änderungsbestätigungen verwendet werden soll. | Bereich=0 bis 600, Standard=keine |
maxDurationPerAckExtension |
Die maximale Zeit in Sekunden, die zum Verlängern des Zeitlimits für Änderungsbestätigungen verwendet werden soll. | Bereich=0 bis 600, Standard=keine |
Im Falle einer genau einmaligen Zustellung: Der modifyAckDeadline
oder acknowledgment
Die Anfrage an Pub/Sub schlägt fehl, wenn die Bestätigungs-ID bereits abgelaufen ist. In solchen Fällen
betrachtet der Dienst die abgelaufene Bestätigungs-ID als ungültig, da
neuere Lieferung möglicherweise bereits in Bearbeitung ist. Dies ist absichtlich so konzipiert, dass
Auslieferung. Sie sehen dann, dass bei acknowledgment
- und ModifyAckDeadline
-Anfragen ein
INVALID_ARGUMENT
-Antwort. Wenn die genau einmalige Zustellung deaktiviert ist,
Bei abgelaufenen Bestätigungs-IDs wird für Anfragen OK
zurückgegeben.
Um sicherzustellen, dass acknowledgment
- und ModifyAckDeadline
-Anfragen gültige
Bestätigungs-IDs haben, sollten Sie den Wert für
minDurationPerAckExtension
auf eine hohe Zahl.
Abos mit genau einmaliger Zustellung erstellen
Sie können ein Abo mit genau einmaliger Zustellung über die Google Cloud Console, die Google Cloud CLI, Clientbibliothek oder die Pub/Sub API erstellen.
Pull-Abo
Console
So erstellen Sie ein Pull-Abo mit genau einmaliger Zustellung:
Öffnen Sie in der Google Cloud Console die Seite Abos.
Klicken Sie auf Abo erstellen.
Geben Sie die Abo-ID ein.
Wählen Sie im Drop-down-Menü ein Thema aus oder erstellen Sie ein Thema.
Das Abo erhält Nachrichten aus dem Thema.
Wählen Sie im Abschnitt Genau einmalige Zustellung die Option Genau einmalige Zustellung aktivieren aus.
Klicken Sie auf Erstellen.
gcloud
Um ein Pull-Abo mit genau einmaliger Zustellung zu erstellen, verwenden Sie die Methode
gcloud pubsub subscriptions create
Befehl mit dem Flag --enable-exactly-once-delivery
:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --enable-exactly-once-delivery
Ersetzen Sie Folgendes:
- SUBSCRIPTION_ID: Die ID des zu erstellenden Abos
- TOPIC_ID: Die ID des Themas, das an das Abo angehängt werden soll
REST
Um ein Abo mit genau einmaliger Zustellung zu erstellen, verwenden Sie die Methode
projects.subscriptions.create
.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth print-access-token)
Ersetzen Sie Folgendes:
- PROJECT_ID: die Projekt-ID des Projekts, in dem das Abo erstellt werden soll
- SUBSCRIPTION_ID: Die ID des zu erstellenden Abos
Geben Sie Folgendes an, um ein Pull-Abo mit genau einmaliger Zustellung zu erstellen im Anfragetext:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "enableExactlyOnceDelivery": true, }
Ersetzen Sie Folgendes:
- PROJECT_ID: Die Projekt-ID des Projekts mit dem Thema
- TOPIC_ID: Die ID des Themas, das an das Abo angehängt werden soll
C++
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C++ API.
C#
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub C# API.
Go
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Go API.
Java
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Java API.
Python
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Python API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Node.js API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Node.js API.
Ruby
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Ruby in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Ruby API.
PHP
Folgen Sie der Einrichtungsanleitung für PHP unter Schnellstart: Clientbibliotheken verwenden, bevor Sie dieses Beispiel ausprobieren. Weitere Informationen finden Sie in der Referenzdokumentation zur PHP-API von Pub/Sub.
Abonnieren mit genau einmaliger Nachrichtenzustellung
Im Folgenden finden Sie einige Codebeispiele für Abos mit genau einmaliger Zustellung mithilfe der Clientbibliothek.
Pull-Abo
Go
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Go in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Go API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Java
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Java in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Java API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Node.js in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Node.js API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
PHP
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für PHP in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub PHP API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Python
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Python in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Python API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Ruby
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Ruby in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Ruby API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
C++
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für C++ in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub C++ API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
C#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für C# in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub C# API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Node.js (TypeScript)
Folgen Sie der Einrichtungsanleitung für Node.js in der Pub/Sub-Kurzanleitung mit Clientbibliotheken Weitere Informationen finden Sie in der Pub/Sub Node.js API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Abos mit genau einmaliger Zustellung beobachten
Die
subscription/exactly_once_warning_count
wird die Anzahl der Ereignisse erfasst,
kann zu erneuten Übermittlungen führen (gültige oder doppelte). Dieser Messwert zählt die
wie oft Pub/Sub Anfragen im Zusammenhang mit
Bestätigungs-IDs (Anfrage ModifyAckDeadline
oder acknowledgment
). Gründe
für den Fehler könnten server- oder clientbasiert sein. Wenn beispielsweise die Persistenz
Ebene, mit der die einmaligen Lieferinformationen nicht verfügbar sind,
ein serverbasiertes Ereignis. Wenn der Client versucht, eine Nachricht mit
ungültige Bestätigungs-ID hat, handelt es sich um ein clientbasiertes Ereignis.
Den Messwert verstehen
subscription/exactly_once_warning_count
erfasst Ereignisse, die möglicherweise
zu tatsächlichen erneuten
Übermittlungen führen und je nach Kundenverhalten unübersichtlich sein können. Für
Beispiel: wiederholte acknowledgment
- oder ModifyAckDeadline
-Anfragen mit ungültigem
Bestätigungs-IDs erhöhen den Messwert wiederholt.
Die folgenden Messwerte sind ebenfalls hilfreich, um das Kundenverhalten zu verstehen:
subscription/expired_ack_deadlines_count
den Messwert die Anzahl der abgelaufenen Bestätigungs-IDs. Bestätigung Ablauf von IDs können zu Fehlern beiModifyAckDeadline
und Anfragen vom Typ „acknowledgment
“.service.serviceruntime.googleapis.com/api/request_count
Messwert kann verwendet werden, um Fehler vonModifyAckDeadline
oderacknowledgment
zu erfassen. in Fällen, in denen die Anfragen Google Cloud erreichen, aber nicht um Pub/Sub zu erreichen. Es gibt Fehler, die für diesen Messwert nicht relevant sind erfassen, z. B. wenn Clients von Google Cloud getrennt sind.
In den meisten Fällen von Fehlerereignissen, die wiederholt werden können, werden unterstützte Clientbibliotheken wiederholen Sie die Anfrage automatisch.
Kontingente
Für Abos mit genau einmaliger Zustellung gelten zusätzliche Kontingente Anforderungen. Diese Kontingente werden erzwungen für:
- Anzahl der Nachrichten, die von Abos mit genau einmaliger Zustellung verarbeitet wurden aktiviert pro Region.
- Anzahl der bestätigten Nachrichten oder deren Frist bei Verwendung von Abos mit genau einmaliger Zustellung pro Region.
Weitere Informationen zu diesen Kontingenten finden Sie in der Tabelle im Kontingente
Genau einmalige Zustellung und bestellte Abos
Pub/Sub unterstützt die genau einmalige Zustellung mit geordneter Zustellung.
Bei Verwendung der Sortierung mit genau einmaliger Zustellung erwartet Pub/Sub in der Reihenfolge zu finden. Wenn die Bestätigungen nicht in der richtigen Reihenfolge vorliegen, die Anfragen mit temporären Fehlern fehl. Wenn die Bestätigungsfrist vor einer Bestellbestätigung für die Lieferung abläuft, eine erneute Zustellung empfangen. Wenn Sie die Funktion „Ordering“ mit genau einmalige Zustellung ist der Clientdurchsatz auf eine Größenordnung von Nachrichten pro Sekunde an.
Genau einmalige Zustellung und Push-Abos
Pub/Sub unterstützt die genau einmalige Zustellung nur mit Pull-Abos.
Clients, die Nachrichten aus den Push-Abos nutzen, bestätigen die Nachrichten indem Sie mit einer erfolgreichen Antwort auf die Push-Anfragen antworten. Die Kunden nicht wissen, ob das Pub/Sub-Abo die Antwort erhalten hat verarbeitet haben. Dies unterscheidet sich von Pull-Abos, bei denen die Anfragen werden von den Clients und dem Pub/Sub-Abo initiiert antwortet, wenn die Anfrage erfolgreich verarbeitet wurde. Aus diesem Grund Die Semantik für genau einmalige Zustellung stimmt nicht gut mit Push-Abos überein.
Wichtige Informationen
Wenn bei der CreateSubscription-Zeit keine Bestätigungsfrist angegeben ist, Abos, bei denen die genau einmalige Zustellung aktiviert ist, haben eine Standardbestätigung einer Frist von 60 Sekunden.
Längere Standardfristen für die Bestätigung sind von Vorteil, um erneute Auslieferung aufgrund von Netzwerkereignissen. Unterstützte Clientbibliotheken verwenden nicht die Frist für die Standardbestätigung von Abos.
Abos mit genau einmaliger Zustellung verzeichnen deutlich mehr Latenz zwischen Veröffentlichung und Abo im Vergleich zu normalen Abos.
Wenn Sie einen hohen Durchsatz benötigen, müssen Ihre Clients für die genau einmalige Zustellung ebenfalls Streaming-Pull verwenden.
Ein Abo kann aufgrund von Duplikaten auf der Veröffentlichungsseite mehrere Kopien derselben Nachricht erhalten, auch wenn die genau einmalige Zustellung aktiviert ist. Duplikate auf Veröffentlichungsseiten können durch mehrere einmalige Veröffentlichungsversuche durch den als Publishing-Client oder den Pub/Sub-Dienst verwenden. Mehrere eindeutige Veröffentlichungen durch den Publishing-Client über Wiederholungsversuche führen zu erneuten Übermittlungen mit unterschiedlichen Nachrichten-IDs. Mehrere eindeutige Veröffentlichungen durch den Pub/Sub-Dienst, um auf eine Client-Veröffentlichungsanfrage zu reagieren, führen zu erneuten Übermittlungen mit denselben Nachrichten-IDs.
Sie können Fehler in
subscription/exactly_once_warning_count
wiederholen. Die unterstützten Clientbibliotheken wiederholen diese automatisch. Fehler im Zusammenhang mit ungültigen Bestätigungs-IDs können jedoch nicht erneut versuchen können.