Google Cloud | Pub/Sub

Was ist Google Cloud Pub/Sub?

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.

 

Features

 

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.  

 

Publisher-Subscriber-Beziehungen

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.

 

 

Häufige Anwendungsfälle

 

 

 

Authorization

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.

 

 

Häufigste Verwendungen

 

Google Pub/Sub Client

 

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.

 

Projects.Snapshots

 

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')

 

 

Projects.Subscriptions

 

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.  

 

Projects.Topics

 

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.')

 

 

Projects.Topics.Subscriptions

 

Method Parameter Beschreibung Beispiel
ListTopicSubscriptions project, topic Listet die Namen der Abonnements zu diesem Topic auf. ListTopicSubscriptions('pubsub-270909', 'topic-1')

 

 

 

Häufigste Methoden

Nachfolgend die häufigsten Methoden, die mit der Google Cloud Pub/Sub API verwendet werden.

 

Wie man ein neues Topic erstellt

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"
}

Eine Nachricht veröffentlichen

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"
  ]
}

Eine Nachricht mit Attributen veröffentlichen


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;

 

So erstellen Sie ein neues Abonnement

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"
  }
}

Wie man Nachrichten aus einem Abonnement liest

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=');