Partilhar via


Use o Azure Event Grid na primavera

Este artigo mostra-lhe como usar Azure Event Grid para enviar um evento a um tópico e usar Service Bus Queue como um Event Handler para receber numa aplicação Spring Boot.

O serviço Azure Event Grid é um serviço de distribuição de mensagens Pub Sub altamente escalável e totalmente gerido que oferece padrões flexíveis de consumo de mensagens utilizando os protocolos MQTT e HTTP.

Pré-requisitos

Subscrever tópico personalizado

Use os seguintes passos para criar uma subscrição de evento e informar a Grade de Eventos para enviar eventos para a Service Bus Queue:

  1. No portal do Azure, navegue até à sua instância de Tópicos do Event Grid.
  2. Selecione Subscrições de Eventos na barra de ferramentas.
  3. Na página Criar Subscrição de Evento, introduza um nome para a subscrição do evento.
  4. Para Tipo de Endpoint, selecione Service Bus Queue.
  5. Escolhe Seleciona um endpoint e depois seleciona a instância Service Bus Queue que criaste anteriormente.

Envie um evento pelo Azure Event Grid e receba pelo Azure Service Bus Queue

Com um recurso do Azure Event Grid, pode enviar um evento usando o Spring Cloud Azure Event Grid. Com um recurso Azure Service Bus Queue como gestor de eventos, pode receber o evento usando o Spring Cloud Azure Stream Binder for Service Bus.

Para instalar o módulo Spring Cloud Azure Event Grid Starter e o módulo Spring Cloud Azure Stream Binder Service Bus, adicione as seguintes dependências ao seu ficheiro pom.xml:

  • A Lista de Materiais Spring Cloud Azure (BOM):

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

    Observação

    Se estiveres a usar o Spring Boot 4.0.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 7.1.0.

    Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 6.1.0.

    Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 5.25.0.

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

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

    Para mais informações sobre a versão usada nesta BOM, consulte Qual Versão do Spring Cloud Azure Devo Usar.

  • O artefato Spring Cloud Azure Event Grid Starter:

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

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

Codifique o aplicativo

Use os seguintes passos para configurar a sua aplicação para enviar um evento usando a Grade de Eventos e receber através da Service Bus Queue.

  1. Configure as credenciais do Azure Event Grid e do Service Bus no ficheiro de configuração application.yaml, como mostrado no seguinte exemplo:

    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

    A Microsoft recomenda o uso do fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como para 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 máquina 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 seguinte conteúdo. Este código gera completaçõ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 a seguir:

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

Desdobrar para o Azure Spring Apps

Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. Azure Spring Apps facilita a implementação de aplicações Spring Boot para Azure sem quaisquer alterações de código. O serviço gerencia a infraestrutura dos aplicativos Spring para que os desenvolvedores possam se concentrar em seu código. O Azure Spring Apps oferece gestão do ciclo de vida através de monitorização e diagnóstico abrangentes, gestão de configuração, descoberta de serviços, integração CI/CD, implementações azul-verde e muito mais. Para implementar a sua aplicação para Azure Spring Apps, consulte Implante a sua primeira aplicação para Azure Spring Apps.

Próximos passos

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