Partilhar via


Usar Grade de Eventos do Azure no Spring Framework

Este artigo mostra como usar a Grade de Eventos do Azure para enviar um evento para um tópico e usar a Fila do Barramento de Serviço como manipulador de eventos para receber em uma aplicação Spring Boot.

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

Pré-requisitos

Subscrever tópico personalizado

Utilize as seguintes etapas para criar uma subscrição de eventos para informar ao Event Grid que envie eventos para a Service Bus Queue:

  1. No portal do Azure, navegue até a sua instância de tópico da grade de eventos.
  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 Ponto de Extremidade, selecione Fila do Service Bus.
  5. Escolha Selecionar o ponto de extremidade e, em seguida, selecione a instância da Fila do Service Bus que criou anteriormente.

Enviar um evento através do Azure Event Grid e receber através da Fila do Azure Service Bus.

Com um recurso de Grade de Eventos do Azure, você pode enviar um evento usando a Grade de Eventos do Azure do Spring Cloud. Com um recurso Azure Service Bus Queue como manipulador de eventos, podes 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 arquivo pom.xml:

  • A lista de materiais (BOM) do Azure Spring Cloud:

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

    Observação

    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. Isso garante que todas as dependências do Spring Cloud Azure estejam usando a mesma versão. Para obter mais informações sobre a versão usada para esta lista técnica, consulte Qual versão do Spring Cloud Azure devo utilizar.

  • O artefato do Spring Cloud Azure Event Grid Starter:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • O artefacto do 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 as etapas a seguir para configurar seu aplicativo para enviar um evento usando a Grade de Eventos e receber usando a Fila do Service Bus.

  1. Configure as credenciais da Grade de Eventos do Azure e do Barramento de Serviço no arquivo de configuração application.yaml do , 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

    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"'
    

Implantar no Azure Spring Apps

Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. do Azure Spring Apps facilita a implantação de aplicativos Spring Boot no Azure sem 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 fornece gerenciamento do ciclo de vida usando monitoramento e diagnóstico abrangentes, gerenciamento de configuração, descoberta de serviços, integração de CI/CD, implantações azul-verde e muito mais. Para implantar seu aplicativo no Azure Spring Apps, consulte Implantar seu primeiro aplicativo no Azure Spring Apps.

Próximos passos

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