Uso de Azure Event Grid en Spring
En este artículo se muestra cómo usar Azure Event Grid para enviar un evento a un tema y usar la cola de Service Bus como un Controlador de eventos para recibir en una aplicación de Spring Boot.
El servicio de Azure Event Grid
Prerrequisitos
Una suscripción a Azure: cree una cuenta gratuita.
Kit de desarrollo de Java (JDK) versión 8 o posterior.
apache Maven, versión 3.0 o posterior.
Una instancia de tema de Event Grid. Si no tiene uno, consulte Creación de un tema personalizado o un dominio en Azure Event Grid.
Una instancia de cola de Service Bus. Si no tiene una, consulte Creación de una cola en Azure Portal.
Una aplicación de Spring Boot. Si no tiene ninguna, cree un proyecto de Maven con Spring Initializr. Asegúrese de seleccionar maven Project y seleccione Java versión 8 o posterior.
Suscripción a un tema personalizado
Siga estos pasos para crear una suscripción de eventos para indicar a Event Grid que envíe eventos a la cola de Service Bus:
- En Azure Portal, navegue a su instancia de tema de Event Grid.
- Seleccione Suscripciones de eventos en la barra de herramientas.
- En la página Crear suscripción de eventos, escriba un valor en Nombre para la suscripción al evento.
- Para Tipo de punto de conexión, seleccione Cola de Service Bus.
- Elija Seleccione un punto de conexión y, a continuación, seleccione la instancia de cola de Service Bus que creó anteriormente.
Envío de un evento mediante Azure Event Grid y recepción mediante la cola de Azure Service Bus.
Con un recurso de Azure Event Grid, puede enviar un evento mediante Spring Cloud Azure Event Grid. Con un recurso Azure Service Bus Queue como controlador de eventos, puede recibir eventos mediante Spring Cloud Azure Stream Binder para Service Bus.
Para instalar el módulo Spring Cloud Azure Event Grid Starter y el módulo Spring Cloud Azure Stream Binder Service Bus, agregue las siguientes dependencias al archivo pom.xml:
La BOM (Lista de Materiales) de Spring Cloud Azure:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Nota
Si usa Spring Boot 2.x, asegúrese de establecer la versión de
spring-cloud-azure-dependencies
en4.19.0
. Esta lista de materiales (BOM) debe configurarse en la sección<dependencyManagement>
del archivo pom.xml. Esto garantiza que todas las dependencias de Azure de Spring Cloud usen la misma versión. Para obtener más información sobre la versión que se usa para esta lista de materiales, consulte Qué versión de Spring Cloud Azure debo usar.El artefacto de Spring Cloud Azure Event Grid Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-eventgrid</artifactId> </dependency>
El artefacto de Spring Cloud Azure Stream Binder Service Bus:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
Codificar la aplicación
Siga estos pasos para configurar la aplicación para enviar un evento mediante Event Grid y recibir mediante la cola de Service Bus.
Configure las credenciales de Azure Event Grid y Service Bus en el archivo de configuración de application.yaml, como se muestra en el ejemplo siguiente:
spring: cloud: azure: eventgrid: endpoint: ${AZURE_EVENTGRID_ENDPOINT} key: ${AZURE_EVENTGRID_KEY} servicebus: connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING} function: definition: consume stream: bindings: consume-in-0: destination: ${AZURE_SERVICEBUS_QUEUE_NAME} servicebus: bindings: consume-in-0: consumer: auto-complete: false
Edite el archivo de clase de inicio para mostrar el siguiente contenido. Este código genera completaciones.
import com.azure.core.util.BinaryData; import com.azure.messaging.eventgrid.EventGridEvent; import com.azure.messaging.eventgrid.EventGridPublisherClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.messaging.Message; import java.util.List; import java.util.function.Consumer; @SpringBootApplication public class EventGridSampleApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventGridSampleApplication.class); @Autowired EventGridPublisherClient<EventGridEvent> client; public static void main(String[] args) { SpringApplication.run(EventGridSampleApplication.class, args); } @Bean public Consumer<Message<String>> consume() { return message -> { List<EventGridEvent> eventData = EventGridEvent.fromString(message.getPayload()); eventData.forEach(event -> { LOGGER.info("New event received: '{}'", event.getData()); }); }; } @Override public void run(String... args) throws Exception { String str = "FirstName: John, LastName: James"; EventGridEvent event = new EventGridEvent("A user is created", "User.Created.Text", BinaryData.fromObject(str), "0.1"); client.sendEvent(event); LOGGER.info("New event published: '{}'", event.getData()); } }
Inicie la aplicación. Después del inicio, la aplicación genera registros similares al ejemplo siguiente:
New event published: '"FirstName: John, LastName: James"' ... New event received: '"FirstName: John, LastName: James"'
Implementación en Azure Spring Apps
Ahora que tiene la aplicación Spring Boot que se ejecuta localmente, es el momento de moverla a producción. azure Spring Apps facilita la implementación de aplicaciones de Spring Boot en Azure sin cambios en el código. El servicio administra la infraestructura de las aplicaciones de Spring para que los desarrolladores puedan centrarse en su código. Azure Spring Apps proporciona administración del ciclo de vida mediante supervisión y diagnósticos completos, administración de configuración, detección de servicios, integración de CI/CD, implementaciones azul-verde, etc. Para implementar la aplicación en Azure Spring Apps, consulte Implementación de la primera aplicación en Azure Spring Apps.
Pasos siguientes
Para más información sobre Spring y Azure, continúe con el Centro de documentación de Spring en Azure.