Auf dieser Seite wird beschrieben, wie Sie Pub/Sub in Java-Anwendungen verwenden, die mit dem Spring Framework erstellt wurden.
Spring Cloud GCP bietet mehrere Module, um mithilfe des Spring Framework Nachrichten an Pub/Sub-Themen zu senden und Nachrichten von Pub/Sub-Abos zu empfangen. Sie können diese Module unabhängig voneinander verwenden oder für verschiedene Anwendungsfälle kombinieren:
- Mit Spring Cloud GCP Pub/Sub Starter können Sie Nachrichten mithilfe von Hilfsklassen senden und empfangen und die Pub/Sub Java-Clientbibliothek für erweiterte Szenarien aufrufen.
- Mit Spring Integration Channel Adapters for Pub/Sub können Sie Spring Integration Message Channels mit Pub/Sub verbinden.
- Mit Spring Cloud Stream Bender for Pub/Sub können Sie Pub/Sub als Messaging-Middleware in Spring Cloud Stream-Anwendungen verwenden.
Hinweis
-
Melden Sie sich bei Ihrem Google-Konto an.
Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.
-
Richten Sie ein Cloud Console-Projekt ein.
Führen Sie folgende Schritte per Mausklick aus:
- Ein Projekt erstellen oder auswählen.
- Aktivieren Sie die Pub/Sub API für dieses Projekt.
- Erstellen Sie ein Dienstkonto.
- Laden Sie einen privaten Schlüssel als JSON-Datei herunter.
Sie können diese Ressourcen jederzeit in der Cloud Console aufrufen und verwalten.
-
Legen Sie für die Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALS
den Pfad der JSON-Datei fest, die Ihren Dienstkontoschlüssel enthält. Diese Variable gilt nur für Ihre aktuelle Shellsitzung. Wenn Sie eine neue Sitzung öffnen, müssen Sie die Variable noch einmal festlegen. - Legen Sie die Umgebungsvariable
GOOGLE_CLOUD_PROJECT
auf Ihre Cloud-Projekt-ID fest:
Spring Cloud GCP Pub/Sub Starter verwenden
Das Modul Spring Cloud GCP Pub/Sub Starter installiert die Pub/Sub-Java-Clientbibliothek mithilfe des Moduls Spring Cloud GCP Pub/Sub. Sie können die Pub/Sub API aus Ihrer Spring-Anwendung mit den Klassen aufrufen, die der Spring Cloud GCP Pub/Sub Starter oder die Pub/Sub Java-Clientbibliothek bereitstellt. Wenn Sie die Klassen verwenden, die vom Spring Cloud GCP Pub/Sub Starter bereitgestellt werden, können Sie die standardmäßigen Pub/Sub-Konfigurationen überschreiben.
Modul installieren
Fügen Sie der Datei pom.xml
diese Abhängigkeiten hinzu, um das Modul „Spring Cloud GCP Pub/Sub-Starter“ zu installieren:
Das Artefakt „Spring Cloud GCP Pub/Sub Starter“:
Unterstützte Vorgänge
Das Modul „Spring Cloud GCP Pub/Sub-Starter“ enthält die folgenden Klassen:
PubSubAdmin
für Verwaltungsvorgänge:- Themen und Abos erstellen.
- Themen und Abos abrufen.
- Themen und Abos auflisten.
- Themen und Abos löschen.
- Bestätigungsfristen für ein Abo abrufen und festlegen.
PubSubTemplate
, um Nachrichten zu senden und zu empfangen:- Nachrichten in Themen veröffentlichen.
- Nachrichten synchron von Abos abrufen.
- Nachrichten asynchron von Abos abrufen.
- Nachrichten bestätigen.
- Bestätigungsfristen ändern.
- Pub/Sub-Nachrichten in Plain Old Java Objects (POJOs) konvertieren.
Spring Integration-Kanaladapter verwenden
Wenn Ihre Spring-Anwendung Spring Integration-Nachrichtenkanäle verwendet, können Sie Nachrichten mithilfe von Kanaladaptern zwischen Ihren Nachrichtenkanälen und Pub/Sub weiterleiten.
- Ein Eingangskanaladapter leitet Nachrichten von einem Pub/Sub-Abo an einen Nachrichtenkanal weiter.
- Ein Ausgangskanaladapter veröffentlicht Nachrichten von einem Nachrichtenkanal in einem Pub/Sub-Thema.
Module installieren
Fügen Sie der Datei pom.xml
Folgendes hinzu, um Module für Spring Integration-Kanaladapter zu installieren:
Die Artefakte „Spring Cloud GCP Pub/Sub Starter“ und „Spring Integration Core“:
Nachrichten von Pub/Sub empfangen
Verwenden Sie einen Eingangskanaladapter, um Nachrichten aus einem Pub/Sub-Abo in Ihrer Spring-Anwendung zu empfangen. Der Eingangskanaladapter konvertiert eingehende Pub/Sub-Nachrichten in POJOs und leitet dann die POJOs an einen Nachrichtenkanal weiter.
Im obigen Beispiel werden die folgenden Spring Beans und Pub/Sub-Ressourcen verwendet:
- Eine Nachrichtenkanal-Bean namens
inputMessageChannel
. - Eine Eingangskanaladapter-Bean namens
inboundChannelAdapter
vom TypPubSubInboundChannelAdapter
. - Pub/Sub-Abo-ID namens
sub-one
.
Der inboundChannelAdapter
ruft Nachrichten mithilfe eines PubSubTemplate
asynchron aus sub-one
ab und sendet die Nachrichten an inputMessageChannel
.
Das inboundChannelAdapter
setzt den Bestätigungsmodus auf MANUAL
, damit die Anwendung Nachrichten bestätigen kann, nachdem sie sie verarbeitet hat. Der Standardbestätigungsmodus von PubSubInboundChannelAdapter
-Typen ist AUTO
.
Die ServiceActivator
-Bean messageReceiver
protokolliert jede in inputMessageChannel
ankommende Nachricht in der Standardausgabe und bestätigt dann die Nachricht.
Nachrichten in Pub/Sub veröffentlichen
Verwenden Sie einen Ausgangskanaladapter, um Nachrichten von einem Nachrichtenkanal in einem Pub/Sub-Thema zu veröffentlichen. Der ausgehende Kanaladapter konvertiert POJOs in Pub/Sub-Nachrichten und sendet die Nachrichten dann an ein Pub/Sub-Thema.
Im obigen Beispiel werden die folgenden Spring-Beans und Pub/Sub-Ressourcen verwendet:
- Eine Nachrichtenkanal-Bean namens
inputMessageChannel
. - Eine Ausgangskanaladapter-Bean namens
messageSender
vom TypPubSubMessageHandler
. - Eine Pub/Sub-Themen-ID namens
topic-two
.
Die ServiceActivator
-Bean wendet die Logik in messageSender
auf jede Nachricht in inputMessageChannel
an.
Der PubSubMessageHandler
in messageSender
veröffentlicht Nachrichten im inputMessageChannel
mithilfe eines PubSubTemplate
. Der PubSubMessageHandler
veröffentlicht Nachrichten für das Pub/Sub-Thema topic-two
.
Spring Cloud Stream Binder verwenden
Verwenden Sie das Modul Spring Cloud GCP Pub/Sub Stream Binder, um die Pub/Sub API in einer Spring Cloud Stream-Anwendung aufzurufen.
Modul installieren
Fügen Sie der Datei pom.xml
Folgendes hinzu, um das Modul „Spring Cloud Stream Bender“ zu installieren:
Das Artefakt „Spring Cloud Stream Bender“:
Nachrichten von Pub/Sub empfangen
Um Ihre Anwendung als Ereignissenke zu verwenden, konfigurieren Sie den Eingabebinder. Geben Sie dazu Folgendes an:
Eine Bean vom Typ
Consumer
, die die Logik der Nachrichtenverarbeitung definiert. Die folgende Bean vom TypConsumer
hat beispielsweise den NamenreceiveMessageFromTopicTwo
:Eine Pub/Sub-Themen-ID in der Konfigurationsdatei
application.properties
. Die folgende Konfigurationsdatei verwendet beispielsweise eine Pub/Sub-Themen-ID namenstopic-two
:
Der Beispielcode empfängt Nachrichten von Pub/Sub. Das Beispiel führt Folgendes aus:
- Ermittelt die Pub/Sub-Themen-ID
topic-two
im Eingabebindungsziel inapplication.properties
. - Erstellt ein Pub/Sub-Abo für
topic-two
. - Verwendet den Bindungsnamen
receiveMessageFromTopicTwo-in-0
, um die Bean vom TypConsumer
namensreceiveMessageFromTopicTwo
zu finden. - Gibt eingehende Nachrichten in der Standardausgabe aus und bestätigt sie automatisch.
Nachrichten in Pub/Sub veröffentlichen
Wenn Sie Ihre Anwendung als Ereignisquelle verwenden möchten, konfigurieren Sie den Ausgabebinder. Geben Sie dazu Folgendes an:
Eine Bean vom Typ
Supplier
, die definiert, woher Nachrichten aus Ihrer Anwendung stammen. Die folgende Bean vom TypSupplier
hat beispielsweise den NamensendMessageToTopicOne
:Eine Pub/Sub-Themen-ID in der Konfigurationsdatei
application.properties
. Die folgende Konfigurationsdatei verwendet beispielsweise eine Pub/Sub-Themen-ID namenstopic-one
:
Der Beispielcode veröffentlicht Nachrichten an Pub/Sub. Das Beispiel führt Folgendes aus:
- Findet die Pub/Sub-Themen-ID
topic-one
im Ausgabebindungsziel inapplication.properties
. - Verwendet den Bindungsnamen
sendMessageToTopicOne-out-0
, um die Bean vom TypSupplier
namenssendMessageToTopicOne
zu finden. - Sendet alle 10 Sekunden eine nummerierte Nachricht an
topic-one
.