En esta página, se describe cómo usar Pub/Sub en aplicaciones Java compiladas con el framework Spring.
Spring Cloud GCP tiene varios módulos para enviar mensajes a temas de Pub/Sub y recibir mensajes de suscripciones de Pub/Sub mediante el framework Spring. Puedes usar estos módulos por separado o combinarlos en diferentes casos de uso:
- Con Spring Cloud GCP Pub/Sub Starter, puedes enviar y recibir mensajes con clases auxiliares y llamar a la biblioteca cliente de Java para Pub/Sub para situaciones más avanzadas.
- Los adaptadores de canales de integración de Spring para Pub/Sub te permiten conectar canales de mensajes de integración de Spring con Pub/Sub.
- El vinculador de Spring Cloud para Pub/Sub te permite usar Pub/Sub como middleware de mensajería en las aplicaciones de Spring Cloud Stream.
NOTA: La biblioteca de Spring Cloud GCP no proporciona acceso a AckReplyConsumerWithResponse, que es un módulo obligatorio para implementar la función de entrega exactamente una vez con la biblioteca cliente de Java.
Antes de comenzar
-
Set up a Trusted 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 Trusted 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. - Establece la variable de entorno
GOOGLE_CLOUD_PROJECT
en tu Trusted Cloud ID del proyecto. El artefacto de Spring Cloud GCP Pub/Sub Starter:
PubSubAdmin
para operaciones administrativas:- Crea temas y suscripciones.
- Obtén temas y suscripciones.
- Muestra una lista de temas y suscripciones.
- Borra temas y suscripciones.
- Obtén y establece plazos de confirmación en una suscripción.
PubSubTemplate
para enviar y recibir mensajes:- Publica mensajes en temas.
- Extrae mensajes de las suscripciones de forma síncrona.
- Extrae mensajes de las suscripciones de forma asíncrona.
- Confirma recepción de mensajes.
- Modifica los plazos de confirmación.
- Convierte mensajes de Pub/Sub en objetos antiguos y sin formato basados en Java (POJO).
- Un adaptador de canal entrante reenvía mensajes de una suscripción a Pub/Sub a un canal de mensajes.
- Un adaptador de canal saliente publica mensajes desde un canal de mensajes en un tema de Pub/Sub.
Los artefactos de Spring Cloud GCP Pub/Sub Starter y Spring Integration Core:
- El bean del canal de mensajes llamado
inputMessageChannel
. - Un bean adaptador de canal entrante llamado
inboundChannelAdapter
de tipoPubSubInboundChannelAdapter
. - Un ID de suscripción a Pub/Sub con el nombre
sub-one
. - El bean del canal de mensajes llamado
inputMessageChannel
. - Un adaptador de canal saliente llamado
messageSender
, de tipoPubSubMessageHandler
, - Un ID de tema de Pub/Sub llamado
topic-two
. El artefacto de Spring Cloud Stream Binder:
Un bean
Consumer
que define la lógica del manejo de mensajes. Por ejemplo, el siguiente beanConsumer
se llamareceiveMessageFromTopicTwo
:Un ID de tema de Pub/Sub en el archivo de configuración
application.properties
. Por ejemplo, el siguiente archivo de configuración usa un ID de tema de Pub/Sub llamadotopic-two
:- Buscar el ID de tema de Pub/Sub
topic-two
en el destino de vinculación de entrada enapplication.properties
. - Crear una suscripción a Pub/Sub para
topic-two
. - Usar el nombre de vinculación
receiveMessageFromTopicTwo-in-0
para encontrar el beanConsumer
llamadoreceiveMessageFromTopicTwo
. - Imprimir los mensajes entrantes en la salida estándar y reconocerlos automáticamente.
Un bean
Supplier
que define de dónde provienen los mensajes dentro de tu aplicación. Por ejemplo, el siguiente beanSupplier
se llamasendMessageToTopicOne
:Un ID de tema de Pub/Sub en el archivo de configuración
application.properties
. Por ejemplo, el siguiente archivo de configuración usa un ID de tema de Pub/Sub llamadotopic-one
:- Busca el ID de tema de Pub/Sub
topic-one
en el destino de vinculación de salida enapplication.properties
. - Usa el nombre de vinculación
sendMessageToTopicOne-out-0
para encontrar el beanSupplier
llamadosendMessageToTopicOne
. - Envía un mensaje numerado a
topic-one
cada 10 segundos.
Usa Spring Cloud GCP Pub/Sub Starter
El módulo Spring Cloud GCP Pub/Sub Starter instala la biblioteca cliente de Java para Pub/Sub con el módulo Spring Cloud GCP Pub/Sub. Puedes llamar a la API de Pub/Sub desde tu aplicación de Spring con las clases que proporciona Spring Cloud Pub/Sub Starter o la biblioteca cliente de Java para Pub/Sub. Si usas las clases que proporciona Spring Cloud GCP Pub/Sub Starter, puedes anular las configuraciones de Pub/Sub predeterminadas.
Instala el módulo
Para instalar el módulo de Spring Cloud GCP Pub/Sub Starter, agrega estas dependencias a tu archivo pom.xml
:
Operaciones admitidas
El módulo de Spring Cloud GCP Pub/Sub Starter incluye las siguientes clases:
Usa adaptadores de canal de integración de Spring
Si tu aplicación de Spring usa canales de mensaje de integración de Spring, puedes enrutar los mensajes entre tus canales de mensajes y Pub/Sub con adaptadores de canal.
Instala los módulos
A fin de instalar módulos para adaptadores de canal de integración de Spring, agrega lo siguiente a tu archivo pom.xml
:
Recibe mensajes de Pub/Sub
Para recibir mensajes de una suscripción de Pub/Sub en tu aplicación de Spring, usa un adaptador de canal entrante. El adaptador de canal entrante convierte los mensajes de Pub/Sub entrantes en POJO y, luego, reenvía los POJO a un canal de mensajes.
En el ejemplo anterior, se usan los siguientes beans de Spring y el siguiente recurso de Pub/Sub:
El inboundChannelAdapter
extrae de forma asíncrona los mensajes de sub-one
mediante un PubSubTemplate
y los envía a inputMessageChannel
.
inboundChannelAdapter
establece el modo de confirmación en MANUAL
para que la aplicación pueda confirmar los mensajes después de procesarlos. El modo de confirmación predeterminado de los tipos PubSubInboundChannelAdapter
es AUTO
.
El bean messageReceiver
de ServiceActivator
registra cada mensaje que llega a inputMessageChannel
en la salida estándar y, luego, confirma la recepción del mensaje.
Publica mensajes en Pub/Sub
Para publicar mensajes de un canal de mensajes en un tema de Pub/Sub, usa un adaptador de canal saliente. El adaptador de canal saliente convierte los POJO en mensajes de Pub/Sub y, luego, envía los mensajes a un tema de Pub/Sub.
En el ejemplo anterior, se usan los siguientes beans de Spring y el siguiente recurso de Pub/Sub:
El bean ServiceActivator
aplica la lógica en messageSender
a cada mensaje en inputMessageChannel
.
El PubSubMessageHandler
en messageSender
publica mensajes en inputMessageChannel
con un PubSubTemplate
. El PubSubMessageHandler
publica mensajes en el tema de Pub/Sub topic-two
.
Usa Spring Cloud Stream Binder
Para llamar a la API de Pub/Sub en una aplicación de Spring Cloud Stream, usa el módulo Spring Cloud Pub/Sub Stream Binder.
Instala el módulo
Para instalar el módulo de Spring Cloud Stream Binder, agrega lo siguiente al archivo pom.xml
:
Recibe mensajes de Pub/Sub
Para usar tu aplicación como un receptor de eventos, configura el vinculador de entrada especificando lo siguiente:
En el código de ejemplo, se reciben mensajes de Pub/Sub. En el ejemplo, se realizan las acciones siguientes:
Publica mensajes en Pub/Sub
Si quieres usar tu aplicación como fuente de eventos, configura el vinculador de salida mediante la especificación siguiente:
En el código de ejemplo, se publican mensajes en Pub/Sub. En el ejemplo, se realizan las acciones siguientes: