Dieses Dokument bietet einen Überblick über ein Pull-Abo, seinen Workflow und verknüpfte Properties.
Bei einem Pull-Abo fordert ein Abonnentenclient Nachrichten vom Pub/Sub-Server.
Der Pull-Modus kann eine der beiden Dienst-APIs verwenden: Pull oder StreamingPull. Zum Ausführen der ausgewählten API können Sie einen von Google bereitgestellten High-Level-Client auswählen oder einer automatisch generierten Low-Level-Clientbibliothek. Sie können auch zwischen der asynchronen und der synchronen Nachrichtenverarbeitung.
Hinweise
Bevor Sie dieses Dokument lesen, sollten Sie sich mit folgenden Themen vertraut machen:
Funktionsweise von Pub/Sub und die verschiedenen Pub/Sub-Begriffe.
Die verschiedenen Arten von Abos die von Pub/Sub unterstützt werden, und warum Sie einen Pull-Modus verwenden sollten, Abo.
Workflow für Pull-Abos
Bei einem Pull-Abo initiiert Ihr Abonnentenclient Anfragen an eine Pub/Sub-Server zum Abrufen von Nachrichten. Der Abonnentenclient verwendet eine der folgenden APIs:
Die meisten Abonnentenclients stellen diese Anfragen nicht direkt. Stattdessen nutzen die von Google Cloud bereitgestellte allgemeine Clientbibliothek, führt intern Streaming-Pull-Anfragen aus und stellt Nachrichten zu asynchron programmiert. Für Abonnenten, die mehr Kontrolle darüber benötigen, abgerufen werden, verwendet Pub/Sub generierte gRPC-Bibliothek. Diese Bibliothek führt Pull- oder Streaming-Pull-Anfragen aus . Diese Anfragen können synchron oder asynchron sein.
Die folgenden beiden Bilder zeigen den Workflow zwischen einem Abonnentenclient und einem Pull-Abo.
Pull-Workflow
Der Pull-Workflow sieht so aus und verweist auf Abbildung 1:
- Der Abonnentenclient ruft explizit die Methode
pull
auf, die Anfragen Nachrichten zugestellt werden. Diese Anfrage ist diePullRequest
, wie in der Bild. Der Pub/Sub-Server antwortet mit null oder mehr Nachrichten Bestätigungs-IDs. Eine Antwort mit null Nachrichten oder einem Fehler angezeigt werden, dass keine Nachrichten zum Empfangen verfügbar sind. Dieses Antwort ist der
PullResponse
, wie in der Abbildung gezeigt.Der Abonnentenclient ruft explizit die Methode
acknowledge
auf. Der Kunde verwendet die zurückgegebene Bestätigungs-ID, um zu bestätigen, dass die Nachricht verarbeitet werden und nicht noch einmal zugestellt werden müssen.
Für eine einzelne Streaming-Pull-Anfrage kann ein Abonnentenclient mehrere Antworten, die aufgrund der offenen Verbindung zurückgegeben wurden. Im Gegensatz dazu ist nur eine Antwort die für jede Pull-Anfrage zurückgegeben werden.
Attribute eines Pull-Abos
Die Attribute, die Sie für ein Pull-Abo konfigurieren, bestimmen, schreiben Sie Nachrichten an Ihr Abo. Weitere Informationen finden Sie unter Abo-Eigenschaften.
Pub/Sub-Dienst-APIs
Das Pub/Sub-Pull-Abo kann eine der folgenden zwei APIs zum Abrufen von Nachrichten:
- Pull
- StreamingPull
Unäre Acknowledge- und ModifyAckDeadline-RPCs verwenden, wenn Sie Nachrichten erhalten mithilfe dieser APIs. Die beiden Pub/Sub APIs werden in der folgenden Registerkarten.
StreamingPull API
Wo möglich, verwenden die Pub/Sub-Clientbibliotheken StreamingPull für maximalen Durchsatz und niedrigste Latenz. Auch wenn Sie das Tag StreamingPull API direkt verwenden, müssen Sie wissen, wie sie sich aus der Pull-API.
Die StreamingPull API benötigt eine persistente bidirektionale Verbindung zu mehrere Nachrichten erhalten, sobald sie verfügbar sind. Im Folgenden finden Sie Workflow:
Der Client sendet eine Anfrage an den Server, um eine Verbindung herzustellen. Wenn das Verbindungskontingent überschritten wird, gibt der Server eine erschöpfte Ressource zurück Fehler. Die Clientbibliothek wiederholt die Fehler, die das Kontingent überschritten haben, automatisch.
Tritt kein Fehler auf oder ist das Verbindungskontingent wieder verfügbar, sendet kontinuierlich Nachrichten an den verbundenen Client.
Wenn oder wenn das Durchsatzkontingent überschritten wird, sendet der Server keine Nachrichten mehr Nachrichten. Die Verbindung ist jedoch nicht unterbrochen. Wann immer ausreichend Durchsatzkontingent wieder verfügbar ist, wird der Stream fortgesetzt.
Die Verbindung wird schließlich vom Client oder Server beendet.
Die StreamingPull API hält eine offene Verbindung aufrecht. Pub/Sub Server schließen die Verbindung immer wieder nach einem bestimmten Zeitraum, um zu vermeiden, für eine dauerhafte Verbindung. Die Clientbibliothek wird automatisch neu geöffnet. eine StreamingPull-Verbindung.
Sobald Nachrichten verfügbar sind, werden sie an die Verbindung gesendet. StreamingPull Die API minimiert auf diese Weise die Latenz und maximiert den Nachrichtendurchsatz.
Weitere Informationen zu den StreamingPull-RPC-Methoden: StreamingPullRequest und StreamingPullResponse.
Pull-API
Diese API ist ein herkömmlicher unärer RPC, der auf einer Anfrage und Antwort basiert Modell. Eine einzelne Pull-Antwort entspricht einer einzelnen Pull-Anfrage. So sieht der Workflow aus:
Der Client sendet eine Anfrage an den Server. Wenn das Durchsatzkontingent überschritten wird, gibt der Server eine Ressource zurück erschöpft ist.
Wenn kein Fehler auftritt oder das Durchsatzkontingent wieder verfügbar ist, Antworten mit null oder mehr Nachrichten und Bestätigungs-IDs
Bei Verwendung der unären Pull-API kann eine Antwort mit null Nachrichten oder mit einem bedeutet nicht unbedingt, dass keine Nachrichten verfügbar sind.
Die Verwendung der Pull-API garantiert keine niedrige Latenz und einen hohen Durchsatz an Nachrichten. Um einen hohen Durchsatz und eine niedrige Latenz mit der Pull-API zu erreichen, müssen mehrere gleichzeitig ausstehende Anfragen haben. Neue Anfragen werden erstellt wenn alte Anfragen eine Antwort erhalten. Die Entwicklung einer solchen Lösung fehleranfällig und schwer zu verwalten. Wir empfehlen die Verwendung von StreamingPull API für solche Anwendungsfälle.
Verwenden Sie nur dann die Pull API anstelle der StreamingPull API, wenn Sie strikte Kontrolle über Folgendes:
- Die Anzahl der Nachrichten, die der Abonnentenclient verarbeiten kann
- Arbeitsspeicher und Ressourcen des Clients
Sie können diese API auch verwenden, wenn Ihr Abonnent ein Proxy zwischen Pub/Sub und ein weiterer Dienst, der in einem Pull-orientierter Ansatz.
Weitere Informationen zu den Pull-REST-Methoden: Methode: projects.subscriptions.pull.
Weitere Informationen zu den Pull-RPC-Methoden: PullRequest und PullResponse.
Arten von Nachrichtenverarbeitungsmodi
Wählen Sie einen der folgenden Pull-Modi für Ihre Abonnentenclients aus.
Asynchroner Pull-Modus
Beim asynchronen Pull-Modus wird der Empfang von Nachrichten von der Verarbeitung entkoppelt von Nachrichten in einem Abonnentenclient. Dieser Modus ist die Standardeinstellung für Abonnenten. Der asynchrone Pull-Modus kann die StreamingPull API oder unärer Pull-API. Beim asynchronen Abrufen kann auch die übergeordnete Clientbibliothek verwendet werden. oder eine automatisch generierte Low-Level-Clientbibliothek.
Weitere Informationen zu Clientbibliotheken finden Sie weiter unten in diesem Dokument.
Synchroner Pull-Modus
Im synchronen Pull-Modus finden der Empfang und die Verarbeitung von Nachrichten und nicht voneinander entkoppelt sind. Ähnlich wie bei StreamingPull vs. unäre Pull-APIs: Die asynchrone Verarbeitung bietet eine geringere Latenz und einen höheren Durchsatz als bei der synchronen Verarbeitung.
Verwenden Sie den synchronen Pull-Modus nur für Anwendungen mit niedriger Latenz und hoher Durchsatz nicht die wichtigsten Faktoren im Vergleich zu einigen anderen Anforderungen. Beispielsweise kann eine Anwendung darauf beschränkt sein, das synchrone Programmiermodell. Oder eine Anwendung mit Ressource erfordern unter Umständen eine genauere Kontrolle über Arbeitsspeicher, Netzwerk oder CPU Verwenden Sie in diesen Fällen den synchronen Modus mit der unäreren Pull API.
Pub/Sub-Clientbibliotheken
Pub/Sub bietet eine automatisch generierte allgemeine und Clientbibliothek.
Übergeordnete Pub/Sub-Clientbibliothek
Die übergeordnete Client-Bibliothek bietet Optionen zum Steuern des zur Bestätigung der Fristen mithilfe der Leasingverwaltung. Diese Optionen sind als bei der Konfiguration der Bestätigungsfristen über die Console oder die Befehlszeile auf Aboebene. Der übergeordnete Client implementiert auch die Unterstützung von Funktionen wie der geordneten Lieferung, genau einmalige Übermittlung und Ablaufsteuerung.
Wir empfehlen die Verwendung des asynchronen Pull-Modus und der StreamingPull API mit der Methode eine allgemeine Clientbibliothek. Nicht alle Sprachen werden unterstützt für Google Cloud unterstützt auch die Pull API in der übergeordneten Clientbibliothek.
Informationen zur Verwendung der übergeordneten Clientbibliotheken finden Sie unter Pub/Sub-Clientbibliotheken
Automatisch generierte Pub/Sub-Clientbibliothek auf niedriger Ebene
Eine Low-Level-Clientbibliothek steht für Fälle zur Verfügung, in denen Sie die Methode Rufen Sie die API direkt ab. Sie können die synchrone oder asynchrone Verarbeitung mit automatisch generierte untergeordnete Clientbibliothek. Sie müssen Funktionen wie geordnete Lieferung, genau einmalige Lieferung, Ablaufsteuerung und Leasingverwaltung wenn Sie die automatisch generierte untergeordnete Clientbibliothek verwenden.
Sie können das synchrone Verarbeitungsmodell verwenden, wenn Sie die Low-Level- automatisch generierte Clientbibliothek für alle unterstützten Sprachen. Sie können den automatisch generierte Low-Level-Clientbibliothek und synchrone Pull-Zustellung in Fällen, in denen direkt mit der Pull API. Vielleicht haben Sie bereits die auf diesem Modell basiert.
Informationen zur direkten Verwendung der automatisch generierten Clientbibliotheken auf niedriger Ebene finden Sie unter Pub/Sub APIs – Übersicht
Codebeispiele für Clientbibliotheken
StreamingPull und Codebeispiele für Clientbibliotheken
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.
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.
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.
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.
Benutzerdefinierte Attribute mithilfe der übergeordneten Clientbibliothek abrufen
Die folgenden Beispiele zeigen, wie Nachrichten asynchron abgerufen und abgerufen werden. die benutzerdefinierten Attribute aus den Metadaten entfernen.
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.
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.
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.
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.
Fehler mithilfe der übergeordneten Clientbibliothek verarbeiten
Die folgenden Beispiele zeigen, wie mit Fehlern umgegangen wird, die beim Nachrichten zu abonnieren.
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.
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.
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.
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.
Ruby
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.
Unäre Pull-Codebeispiele
Im Folgenden finden Sie Beispielcode, Pull und Bestätigen an eine feste Anzahl von Nachrichten gesendet.
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.
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.
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.
PHP
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.
Protokoll
Anfrage:
POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:pull
{
"returnImmediately": "false",
"maxMessages": "1"
}
Antwort:
200 OK
{
"receivedMessages": [{
"ackId": "dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK...",
"message": {
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "19917247034"
}
}]
}
Anfrage:
POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:acknowledge
{
"ackIds": [
"dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK..."
]
}
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.
Pub/Sub stellt eine Liste von Nachrichten bereit. Wenn die Liste mehrere Nachrichten enthält, ordnet Pub/Sub die Nachrichten denselben Reihenfolgeschlüssel. Im Folgenden sind einige wichtige Einschränkungen aufgeführt:
Das Festlegen eines Werts für
max_messages
in der Anfrage ist keine Garantie dassmax_messages
zurückgegeben werden, auch wenn so viele Nachrichten im Backlog. Die Pub/Sub Pull API gibt möglicherweise weniger alsmax_messages
, um die Zustellungslatenz für Nachrichten zu verringern die sofort bereitgestellt werden können.Eine Pull-Antwort mit 0 Nachrichten darf nicht als Indikator verwendet werden dass es keine Nachrichten im Backlog gibt. Es ist möglich, eine Antwort zu erhalten. mit 0 Nachrichten und eine weitere Anfrage, die Nachrichten zurückgibt.
Um eine niedrige Latenz bei der Nachrichtenzustellung mit dem unären Pull-Modus zu erreichen, viele gleichzeitig ausstehende Pull-Anfragen. Als erhöht sich der Durchsatz des Themas, sind mehr Pull-Anfragen erforderlich. Im Allgemeinen ist der StreamingPull-Modus für latenzempfindlichen Anwendungen.
Kontingente und Limits
Sowohl Pull- als auch StreamingPull-Verbindungen unterliegen Kontingenten und Limits. Weitere Informationen finden Sie unter Pub/Sub-Kontingente und -Limits.
Nächste Schritte
Erstellen Sie ein Pull-Abo für Ihr Thema.
Abo mit der gcloud CLI erstellen oder ändern
Abo mit REST APIs erstellen oder ändern
Abo mit RPC APIs erstellen oder ändern