Dieses Dokument bietet einen Überblick über ein Pull-Abo, seinen Workflow und die zugehörigen 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 eine von Google bereitgestellte Clientbibliothek der höheren Ebene oder eine automatisch generierte Clientbibliothek der unteren Ebene auswählen. Sie können auch zwischen der asynchronen und der synchronen Nachrichtenverarbeitung.
Hinweis
Bevor Sie dieses Dokument lesen, sollten Sie mit Folgendem vertraut sein:
Funktionsweise von Pub/Sub und die verschiedenen Pub/Sub-Begriffe
Die verschiedenen Arten von Abos, die Pub/Sub unterstützt, und warum Sie ein Pull-Abo verwenden sollten.
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 Clients die von Google Cloud bereitgestellte Clientbibliothek, die Streaming-Pull-Anfragen intern ausführt und Nachrichten asynchron überträgt. 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 bezieht sich 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 ohne Nachrichten oder mit einem Fehler bedeutet nicht unbedingt, 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.
Eigenschaften 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-Attribute.
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 die StreamingPull API vielleicht niemals direkt verwenden, ist es wichtig, zu wissen, wie sie sich von der Pull API unterscheidet.
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.
Wenn kein Fehler auftritt oder das Verbindungskontingent wieder verfügbar ist, sendet der Server kontinuierlich Nachrichten an den verbundenen Client.
Wenn das Durchsatzkontingent überschritten wird, sendet der Server keine Nachrichten mehr. 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 vom Server geschlossen.
Die StreamingPull API hält eine offene Verbindung aufrecht. Die Pub/Sub-Server schließen die Verbindung nach einem bestimmten Zeitraum regelmäßig, um eine lang andauernde Sticky-Verbindung zu vermeiden. Die Clientbibliothek wird automatisch neu geöffnet. eine StreamingPull-Verbindung.
Sobald Nachrichten verfügbar sind, werden sie an die Verbindung gesendet. Die StreamingPull API minimiert so die Latenz und maximiert den Durchsatz für Nachrichten.
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 modellieren. 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 vorliegt oder das Durchsatzkontingent wieder verfügbar ist, antwortet der Server 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. erhalten möchten.
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. Für solche Anwendungsfälle empfehlen wir die StreamingPull API.
Verwenden Sie die Pull API anstelle der StreamingPull API nur, wenn Sie Folgendes genau steuern möchten:
- 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 Verarbeitungsmodi für Nachrichten
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 die meisten Abonnenten-Clients. 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 der Empfang und die Verarbeitung von Nachrichten in und nicht voneinander entkoppelt sind. Ä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 mit niedriger Latenz und hoher Durchsatz nicht die wichtigsten Faktoren im Vergleich zu einigen anderen Anforderungen. 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 Clientbibliothek auf höherer und niedriger Ebene.
Übergeordnete Pub/Sub-Clientbibliothek
Die allgemeine Clientbibliothek bietet Optionen zur Steuerung der Fristen für die Bestätigung mithilfe der Freigabeverwaltung. Diese Optionen sind detaillierter als wenn Sie die Fristen für die Bestätigung über die Console oder die Befehlszeile auf Aboebene konfigurieren. 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 Clientbibliotheken der höheren Ebene finden Sie unter Pub/Sub-Clientbibliotheken.
Automatisch generierte Pub/Sub-Clientbibliothek auf niedriger Ebene
Eine Clientbibliothek auf niedriger Ebene ist verfügbar, wenn Sie die Pull API direkt verwenden müssen. Sie können die synchrone oder asynchrone Verarbeitung mit der automatisch generierten Clientbibliothek auf niedriger Ebene verwenden. Wenn Sie die automatisch generierte Low-Level-Clientbibliothek verwenden, müssen Sie Funktionen wie die geordnete Zustellung, die Zustellung genau einmal, die Ablaufsteuerung und die Leasingverwaltung manuell codieren.
Sie können das synchrone Verarbeitungsmodell verwenden, wenn Sie die automatisch generierte Clientbibliothek für alle unterstützten Sprachen verwenden. Sie können den automatisch generierte Low-Level-Clientbibliothek und synchrone Pull-Zustellung in Fällen, in denen direkt mit der Pull API. Möglicherweise haben Sie beispielsweise eine vorhandene Anwendungslogik, 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.
Codebeispiele für unäres Pull
Im Folgenden finden Sie Beispielcode, Pull und Bestätigen an eine feste Anzahl von Nachrichten gesendet werden.
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, sortiert Pub/Sub die Nachrichten mit demselben 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, es sind mehr Pull-Anfragen erforderlich. Im Allgemeinen ist der StreamingPull-Modus für latenzempfindliche Anwendungen zu bevorzugen.
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
Mit REST APIs ein Abo erstellen oder ändern
Abo mit RPC APIs erstellen oder ändern