Usar o Grade de Eventos do Azure no ambiente Spring

Este artigo mostra como usar Grade de Eventos do Azure para enviar um evento para um tópico e usar Barramento de Serviço Queue como um manipulador Event para receber em um aplicativo Spring Boot.

O serviço Grade de Eventos do Azure é um serviço de distribuição de mensagens Pub Sub totalmente gerenciado altamente escalonável que oferece padrões flexíveis de consumo de mensagens usando os protocolos MQTT e HTTP.

Pré-requisitos

Inscrever-se em um tópico personalizado

Use as seguintes etapas para criar uma assinatura de evento para informar o Event Grid para enviar eventos para a Fila do Barramento de Serviço:

  1. No portal do Azure, navegue até a instância do Tópico da Grade de Eventos.
  2. Selecione Assinaturas de Evento na barra de ferramentas.
  3. Na página Criar Assinatura de Evento, insira um valor de nome para a assinatura do evento.
  4. Para Endpoint Type, selecione Barramento de Serviço Queue.
  5. Escolha Selecionar um endpoint e, em seguida, selecione a instância da Fila do Barramento de Serviço que você criou anteriormente.

Enviar um evento pelo Grade de Eventos do Azure e receber pela fila do Barramento de Serviço do Azure

Com um recurso Grade de Eventos do Azure, você pode enviar um evento usando o Spring Cloud Grade de Eventos do Azure. Com um recurso Barramento de Serviço do Azure Queue como manipulador de eventos, você pode receber o evento usando o Spring Cloud Azure Stream Binder para Barramento de Serviço.

Para instalar o módulo Spring Cloud Grade de Eventos do Azure Starter e o módulo do Spring Cloud Azure Stream Binder Barramento de Serviço, adicione as seguintes dependências ao arquivo pom.xml:

  • O Spring Cloud Azure Bill of Materials (BOM):

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

    Observação

    Se você estiver usando o Spring Boot 4.0.x, defina a spring-cloud-azure-dependencies versão como 7.2.0.

    Se você estiver usando o Spring Boot 3.5.x, defina a spring-cloud-azure-dependencies versão como 6.2.0.

    Se você estiver usando o Spring Boot 3.1.x-3.5.x, defina a spring-cloud-azure-dependencies versão como 5.25.0.

    Se você estiver usando o Spring Boot 2.x, certifique-se de definir a spring-cloud-azure-dependencies versão como 4.20.0.

    Esta lista de materiais (BOM) deve ser configurada na <dependencyManagement> seção do arquivo pom.xml. Isso garante que todas as dependências de Azure do Spring Cloud estejam usando a mesma versão.

    Para obter mais informações sobre a versão usada para este BOM, consulte Which Version of Spring Cloud Azure Should I Use.

  • O artefato Spring Cloud Grade de Eventos do Azure Starter:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • O artefato Barramento de Serviço do Spring Cloud Azure Stream Binder:

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

Codificar o aplicativo

Use as etapas a seguir para configurar seu aplicativo para enviar um evento usando o Event Grid e receber usando a Fila do Barramento de Serviço.

  1. Configure credenciais de Grade de Eventos do Azure e Barramento de Serviço no arquivo de configuração application.yaml, conforme mostrado no exemplo a seguir:

    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
    

    Observação

    Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como bancos de dados, caches, mensagens ou serviços de IA, requer um grau muito alto de confiança no aplicativo e traz riscos não presentes em outros fluxos. Use esse fluxo somente quando opções mais seguras, como identidades gerenciadas para conexões sem senha ou sem chave, não forem viáveis. Para operações de computador local, prefira identidades de usuário para conexões sem senha ou sem chave.

  2. Edite o arquivo de classe de inicialização para mostrar o conteúdo a seguir. Esse código gera conclusões.

    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 o aplicativo. Após a inicialização, o aplicativo produz logs semelhantes ao exemplo seguinte:

    New event published: '"FirstName: John, LastName: James"'
    ...
    New event received: '"FirstName: John, LastName: James"'
    

Implantação no Aplicativos Spring do Azure

Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para produção. Aplicativos Spring do Azure facilita a implantação de aplicativos Spring Boot para Azure sem alterações de código. O serviço gerencia a infraestrutura dos aplicativos do Spring para que os desenvolvedores possam se concentrar no código. Aplicativos Spring do Azure fornece gerenciamento de ciclo de vida usando monitoramento e diagnóstico abrangentes, gerenciamento de configuração, descoberta de serviço, integração de CI/CD, implantações azul-verde e muito mais. Para implantar seu aplicativo em Aplicativos Spring do Azure, consulte Deploy seu primeiro aplicativo para Aplicativos Spring do Azure.

Próximas etapas

Para saber mais sobre o Spring e Azure, continue para o Centro de documentação do Spring on Azure.