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: Die Spring Cloud GCP-Bibliothek bietet keinen Zugriff auf AckReplyConsumerWithResponse. Dieses Modul ist jedoch erforderlich, um die Funktion „Einmal genau“ mit der Java-Clientbibliothek zu implementieren.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
- Create a service account.
- Download a private key as JSON.
You can view and manage these resources at any time in the Google Cloud console.
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again. -
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
- Create a service account.
- Download a private key as JSON.
You can view and manage these resources at any time in the Google Cloud console.
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again. - Legen Sie die Umgebungsvariable
GOOGLE_CLOUD_PROJECT
auf Ihre Google 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
.