Compartir a través de


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 es un servicio de distribución de mensajes Pub Sub altamente escalable y totalmente administrado que ofrece patrones de consumo de mensajes flexibles mediante los protocolos MQTT y HTTP.

Prerrequisitos

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:

  1. En Azure Portal, navegue a su instancia de tema de Event Grid.
  2. Seleccione Suscripciones de eventos en la barra de herramientas.
  3. En la página Crear suscripción de eventos, escriba un valor en Nombre para la suscripción al evento.
  4. Para Tipo de punto de conexión, seleccione Cola de Service Bus.
  5. 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 en 4.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.

  1. 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
    
  2. 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());
        }
    }
    
    
  3. 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.