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 controlador de eventos para recibirlo en una aplicación de Spring Boot.

El servicio 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.

Requisitos previos

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, vaya a la instancia del 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 de nombre para la suscripción de eventos.
  4. En Tipo de punto de conexión, seleccione Cola de Service Bus.
  5. Elija Seleccionar 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 por Azure Event Grid y recepción por 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 de cola de Azure Service Bus como controlador de eventos, puede recibir el evento 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 de pom.xml :

  • La lista de materiales (BOM) de Azure de Spring Cloud:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.14.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Nota:

    Si usa Spring Boot 2.x, asegúrese de establecer la spring-cloud-azure-dependencies versión 4.19.0en . Esta lista de materiales (BOM) debe configurarse en la <dependencyManagement> sección 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 La versión de Spring Cloud que se debe usar en Azure.

  • El artefacto Spring Cloud Azure Event Grid Starter:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • Artefacto de Spring Cloud Azure Stream Binder Service Bus:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
    </dependency>
    

Incorporación del código de 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 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 finalizaciones.

    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, con el fin de que los desarrolladores puedan centrarse en el código. Azure Spring Apps proporciona administración del ciclo de vida mediante el uso de una supervisión y un diagnóstico completos, administración de la configuración, detección de servicios, integración de CI/CD e implementaciones azul-verde, entre otros. 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 acerca de Spring y Azure, vaya al centro de documentación de Azure.