Pub/Sub bringt die Flexibilität und Zuverlässigkeit von Enterprise-Message-orientierter Middleware in die Cloud. Gleichzeitig ist Pub/Sub ein skalierbares, dauerhaftes Event-Ingestion- und -Zustellungssystem, das als Grundlage für moderne Stream-Analytics-Pipelines dient. Durch die Bereitstellung von Many-to-Many-, asynchronem Messaging, das Sender und Empfänger entkoppelt, ermöglicht es eine sichere und hochverfügbare Kommunikation zwischen unabhängig geschriebenen Anwendungen. Pub/Sub liefert dauerhaftes Messaging mit niedriger Latenz, das Entwicklern hilft, auf der Google Cloud Platform und extern gehostete Systeme schnell zu integrieren.
| At-least-once-Zustellung Synchrone, zonenübergreifende Nachrichtenreplikation und die Empfangsverfolgung pro Nachricht gewährleisten die At-least-once-Zustellung in beliebigem Umfang. | Open Offene APIs und Client-Bibliotheken in sieben Sprachen unterstützen Cross-Cloud- und Hybrid-Bereitstellungen. | Exactly-once-Verarbeitung Cloud Dataflow unterstützt eine zuverlässige, ausdrucksstarke Exactly-once-Verarbeitung von Cloud Pub/Sub-Streams. |
| Standardmäßig global Veröffentlichen Sie von überall auf der Welt und konsumieren Sie von überall, mit konsistenter Latenz. Keine Replikation erforderlich. | Kein Provisioning, alles automatisch Cloud Pub/Sub hat keine Shards oder Partitionen. Legen Sie einfach Ihr Kontingent fest, veröffentlichen Sie und konsumieren Sie. | Compliance und Sicherheit Cloud Pub/Sub ist ein HIPAA-konformer Dienst, der feingranulare Zugriffskontrollen und Ende-zu-Ende-Verschlüsselung bietet. |
| Integriert Nutzen Sie Integrationen mit mehreren Diensten, wie Cloud Storage- und Gmail-Aktualisierungsereignisse sowie Cloud Functions für serverloses ereignisgesteuertes Computing. | Suchen und erneut abspielen Spulen Sie Ihren Rückstand auf einen beliebigen Zeitpunkt oder einen Snapshot zurück und erhalten Sie die Möglichkeit, die Nachrichten erneut zu verarbeiten. Spulen Sie vor, um veraltete Daten zu verwerfen. |
Eine Publisher-Anwendung erstellt und sendet Nachrichten an ein Topic. Subscriber-Anwendungen erstellen ein Abonnement eines Topics, um Nachrichten daraus zu empfangen. Die Kommunikation kann one-to-many (Fan-out), many-to-one (Fan-in) und many-to-many sein.

Der Google Pub/Sub-Komponenten-Client kann sich mit den folgenden Methoden bei Google-Servern anmelden:
OAuth2
Die Anmeldung erfolgt über einen Webbrowser, in dem sich der Benutzer mit seinem eigenen Konto anmeldet und die PubSub-Anfragen autorisiert.
Service Accounts
Die Anmeldung erfolgt durch Signieren der Anfragen mit einem von Google bereitgestellten privaten Schlüssel. Diese Methode wird für automatisierte Dienste oder Anwendungen ohne Benutzerinteraktion empfohlen.
TLS-Optionen
TLSOptions zentralisiert die Konfiguration des sicheren Kanals, der zur Kommunikation mit Google Cloud Pub/Sub verwendet wird.
Beispiel:
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.TLSOptions.IOHandler := iohOpenSSL;
oPubSub.TLSOptions.Version := tls1_3;
oPubSub.TLSOptions.VerifyCertificate := True;
oPubSub.TLSOptions.OpenSSL_Options.LibPath := oslpDefaultFolder;
Wenn ein neuer Service Account erstellt wird, können Sie eine JSON-Datei mit allen Konfigurationen herunterladen. Diese Datei kann von der PubSub-Komponente verarbeitet werden; rufen Sie einfach die Methode LoadSettingsFromFile auf und übergeben Sie den JSON-Dateinamen als Argument.
OAuth2
Um mit der Google Pub/Sub API zu arbeiten, verwendet die sgcWebSockets-Pub/Sub-Komponente OAuth2 als Standardauthentifizierung, daher müssen Sie zuerst Ihre ClientId und ClientSecret aus Ihrem Google-Konto setzen.
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.Authorization := gcaOAuth2;
oPubSub.GoogleCloudOptions.OAuth2.ClientId := '... your google client id...';
oPubSub.GoogleCloudOptions.OAuth2.ClientSecret := '... your google client secret...';
Service Accounts
Service Accounts erfordern das Erstellen eines JWT und dessen Übergabe als Autorisierungstoken.
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.Authorization := gcaJWT;
oPubSub.GoogleCloudOptions.JWT.ClientEmail := '...google email...';
oPubSub.GoogleCloudOptions.JWT.PrivateKeyId := '...private key id...';
oPubSub.GoogleCloudOptions.JWT.PrivateKey.Lines.Text := '...private key certificate...';
Dies ist erforderlich, um einen Authorization Token Key von Google zu erhalten, der für alle REST-API-Aufrufe verwendet wird.
Alle Methoden geben eine Antwort zurück, die erfolgreich sein oder einen Fehler zurückgeben kann.
| Method | Parameter | Beschreibung | Beispiel |
| CreateSnapshot | project, snapshot, subscription | Erstellt einen Snapshot aus dem angeforderten Abonnement. Snapshots werden bei subscriptions.seek-Operationen verwendet, mit denen Sie Nachrichtenbestätigungen massenweise verwalten können. Das heißt, Sie können den Bestätigungsstatus von Nachrichten in einem bestehenden Abonnement auf den von einem Snapshot erfassten Zustand setzen. | CreateSnapshot('pubsub-270909', 'snapshot-1', 'subscription-1') |
| DeleteSnapshot | project, snapshot | Entfernt einen vorhandenen Snapshot | DeleteSnapshot('pubsub-270909', 'snapshot-1') |
| ListSnapshots | project | Listet die vorhandenen Snapshots auf | ListSnapshots('pubsub-270909') |
| Method | Parameter | Beschreibung | Beispiel |
| AcknowledgeSubscription | |||
| CreateSubscription | project, subscription, topic | Erstellt ein Abonnement für ein bestimmtes Topic. Wenn das Abonnement bereits existiert, wird ALREADY_EXISTS zurückgegeben. Wenn das entsprechende Topic nicht existiert, wird NOT_FOUND zurückgegeben. | CreateSubscription('pubsub-270909', 'subscription-1', 'topic-1') |
| DeleteSubscripton | project, subscription | Löscht ein vorhandenes Abonnement. Alle im Abonnement zurückgehaltenen Nachrichten werden sofort verworfen. | DeleteSubscription('pubsub-270909', 'subscription-1') |
| GetSubscription | project, subscription | Ruft die Konfigurationsdetails eines Abonnements ab. | GetSubscription('pubsub-270909', 'subscription-1') |
| ListSubscriptions | project | Listet übereinstimmende Abonnements auf. | ListSubscriptions('pubsub-270909', 'subscription-1') |
| ModifyAckDeadlineSubscription | project, subscription, AckIds | Ändert die Ack-Deadline für eine bestimmte Nachricht. Diese Methode ist nützlich, um anzuzeigen, dass der Abonnent mehr Zeit zur Verarbeitung einer Nachricht benötigt, oder um die Nachricht für eine erneute Zustellung verfügbar zu machen, wenn die Verarbeitung unterbrochen wurde. Beachten Sie, dass dies nicht die ackDeadlineSeconds auf Abonnementebene ändert, die für nachfolgende Nachrichten verwendet werden. | |
| ModifyPushConfigSubscription | project, subscription | Ändert die PushConfig für ein angegebenes Abonnement. Dies kann verwendet werden, um ein Push-Abonnement in ein Pull-Abonnement umzuwandeln (gekennzeichnet durch eine leere PushConfig) oder umgekehrt, oder um die Endpunkt-URL und andere Attribute eines Push-Abonnements zu ändern. Nachrichten werden während des Aufrufs unabhängig von Änderungen an der PushConfig kontinuierlich zur Zustellung gesammelt. | |
| Pull | project, subscription | Ruft Nachrichten vom Server ab. Der Server kann UNAVAILABLE zurückgeben, wenn zu viele gleichzeitige Pull-Anfragen für das angegebene Abonnement ausstehen. | pull('pubsub-270909', 'subscription-1') |
| Seek | project, subscription, timeUTC, snapshot | Sucht in einem vorhandenen Abonnement zu einem Zeitpunkt oder zu einem bestimmten Snapshot, je nachdem, was in der Anfrage angegeben ist. Snapshots werden bei subscriptions.seek-Operationen verwendet, die es Ihnen ermöglichen, Nachrichtenbestätigungen in großen Mengen zu verwalten. Das heißt, Sie können den Bestätigungsstatus von Nachrichten in einem vorhandenen Abonnement auf den von einem Snapshot erfassten Status setzen. Beachten Sie, dass sich sowohl das Abonnement als auch der Snapshot auf demselben Topic befinden müssen. |
| Method | Parameter | Beschreibung | Beispiel |
| CreateTopic | project, topic | Erstellt das angegebene Topic mit dem angegebenen Namen | CreateTopic('pubsub-270909', 'topic-1') |
| DeleteTopic | project, topic | Löscht das Topic mit dem angegebenen Namen. Gibt NOT_FOUND zurück, wenn das Topic nicht existiert. Nachdem ein Topic gelöscht wurde, kann ein neues Topic mit demselben Namen erstellt werden; dies ist ein völlig neues Topic ohne die alte Konfiguration oder Abonnements. | DeleteTopic('pubsub-270909', 'topic-1') |
| GetTopic | project, topic | Ruft die Konfiguration eines Topics ab. | GetTopic('pubsub-270909', 'topic-1') |
| ListTopics | project | Listet übereinstimmende Topics auf. | ListTopics('pubsub-270909') |
| Veröffentlichen | project, topic, message | Fügt dem Topic eine oder mehrere Nachrichten hinzu. Gibt NOT_FOUND zurück, wenn das Topic nicht existiert. | Publish('pubsub-270909', 'topic-1', 'My First PubSub Message.') |
| Method | Parameter | Beschreibung | Beispiel |
| ListTopicSubscriptions | project, topic | Listet die Namen der Abonnements zu diesem Topic auf. | ListTopicSubscriptions('pubsub-270909', 'topic-1') |
Nachfolgend die häufigsten Methoden, die mit der Google Cloud Pub/Sub API verwendet werden.
Erstellt ein neues Topic für das Projekt mit der ID: pubsub-270909 und dem Topic-Namen topic-1.
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.OAuth2.ClientId := '... your google client id...';
oPubSub.GoogleCloudOptions.OAuth2.ClientSecret := '... your google client secret...';
oPubSub.CreateTopic('pubsub-270909', 'topic-1');
Antwort vom Server
{
"name": "projects/pubsub-270909/topics/topic-1"
}
Veröffentlicht eine neue Nachricht im neu erstellten Topic.
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.OAuth2.ClientId := '... your google client id...';
oPubSub.GoogleCloudOptions.OAuth2.ClientSecret := '... your google client secret...';
oPubSub.Publish('pubsub-270909', 'topic-1', 'My First Message from sgcWebSockets.'));
Antwort vom Server
{
"messageIds": [
"1050732082561505"
]
}
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.OAuth2.ClientId := '... your google client id...';
oPubSub.GoogleCloudOptions.OAuth2.ClientSecret := '... your google client secret...';
oAttributes := TStringList.Create;
Try
oAttributes.CommaText := 'origin=gcloud-sample,username=gcp';
oPubSub.Publish('pubsub-270909', 'topic-1', 'My First Message from sgcWebSockets.', oAttributes, 'username'));
Finally
oAttributes.Free;
end;
Erstellt ein neues Abonnement für das Projekt mit der ID: pubsub-270909, mit dem Abonnementnamen subscription-1 und topic-1
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.OAuth2.ClientId := '... your google client id...';
oPubSub.GoogleCloudOptions.OAuth2.ClientSecret := '... your google client secret...';
oPubSub.CreateSubscription('pubsub-270909', 'subscription-1', 'topic-1');
Antwort vom Server
{
"name": "projects/pubsub-270909/subscriptions/subscription-1",
"topic": "projects/pubsub-270909/topics/topic-1",
"pushConfig": {},
"ackDeadlineSeconds": 10,
"messageRetentionDuration": "604800s",
"expirationPolicy": {
"ttl": "2678400s"
}
}
Liest Nachrichten aus einem zuvor erstellten Abonnement.
oPubSub := TsgcHTTPGoogleCloud_PubSub_Client.Create(nil);
oPubSub.GoogleCloudOptions.OAuth2.ClientId := '... your google client id...';
oPubSub.GoogleCloudOptions.OAuth2.ClientSecret := '... your google client secret...';
oPubSub.pubsub.Pull('pubsub-270909', 'subscription-1');
Antwort vom Server
{
"receivedMessages": [
{
"ackId": "PjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRREFC08CKF15MEorQVh0Dj4N",
"message": {
"data": "TXkgRmlyc3QgTWVzc2FnZSBmcm9tIHNnY1dlYlNvY2tldHMu",
"messageId": "1050732082561505",
"publishTime": "2020-03-14T15:25:31.505Z"
}
}
]
}
Die Nachricht wird in Base64 codiert empfangen, daher müssen Sie sie zuerst decodieren, um den Inhalt zu lesen.
sgcBase_Helpers.DecodeBase64('TXkgRmlyc3QgTWVzc2FnZSBmcm9tIHNnY1dlYlNvY2tldHMu=');