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. Außerdem können Sie zwischen asynchroner und synchroner Nachrichtenverarbeitung wählen.
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 Client verwendet die zurückgegebene Bestätigungs-ID, um zu bestätigen, dass die Nachricht verarbeitet wurde und nicht noch einmal zugestellt werden muss.
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.
Eigenschaften eines Pull-Abos
Die Eigenschaften, die Sie für ein Pull-Abo konfigurieren, bestimmen, wie Sie Nachrichten in Ihr Abo schreiben. 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 auf den folgenden Tabs beschrieben.
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 den Fehler „Ressource erschöpft“ zurück. 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 öffnet eine StreamingPull-Verbindung automatisch wieder.
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 eine traditionelle unary RPC, die auf einem Anfrage- und Antwortmodell basiert. Eine einzelne Pull-Antwort entspricht einer einzelnen Pull-Anfrage. Der Workflow sieht so 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 mit der Pull API einen hohen Durchsatz und eine niedrige Latenz zu erzielen, müssen mehrere gleichzeitig ausstehende Anfragen vorhanden sein. 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
Im asynchronen Pull-Modus wird der Empfang von Nachrichten von der Verarbeitung von Nachrichten in einem Abonnentenclient entkoppelt. 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 erfolgen Empfang und Verarbeitung von Nachrichten nacheinander und sind nicht voneinander entkoppelt. Ähnlich wie bei StreamingPull- und unary Pull-APIs bietet die asynchrone Verarbeitung eine geringere Latenz und einen höheren Durchsatz als die synchrone Verarbeitung.
Verwenden Sie den synchronen Pull-Modus nur für Anwendungen, bei denen eine niedrige Latenz und ein hoher Durchsatz im Vergleich zu anderen Anforderungen nicht die wichtigsten Faktoren sind. Eine Anwendung kann beispielsweise nur das synchrone Programmiermodell verwenden. 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. Die Clientbibliothek der höheren Ebene unterstützt auch Funktionen wie die geordnete Zustellung, die Zustellung genau einmal und die 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 mit der Clientbibliothek der höheren Ebene 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 an 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:
Wenn Sie in der Anfrage einen Wert für
max_messages
festlegen, ist nicht garantiert, dassmax_messages
Nachrichten zurückgegeben werden, auch wenn sich so viele Nachrichten im Backlog befinden. 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, dass du eine Antwort mit 0 Nachrichten erhältst und eine nachfolgende Anfrage Nachrichten zurückgibt.
Voraussetzung für die Effektivität des unary-Pull-Modus ist, dass eine hohe Zahl gleichzeitig ausstehender Pull-Anfragen vorliegt. 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