Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tutorial mostra-lhe como configurar um Spring Cloud Stream Binder baseado em Java para usar o Hubs de Eventos do Azure para Kafka para enviar e receber mensagens com o Hubs de Eventos do Azure. Para mais informações, veja Use Hubs de Eventos do Azure de aplicações Apache Kafka
Neste tutorial, vamos incluir dois métodos de autenticação: autenticação Microsoft Entra e autenticação Assinaturas de Acesso Partilhado (SAS). O separador Passwordless mostra a autenticação Microsoft Entra e o separador Connection string mostra a autenticação SAS.
A autenticação Microsoft Entra é um mecanismo para se ligar ao Hubs de Eventos do Azure para Kafka, utilizando identidades definidas no Microsoft Entra ID. Com a autenticação Microsoft Entra, pode gerir as identidades dos utilizadores da base de dados e outros serviços serviços Microsoft numa localização central, o que simplifica a gestão de permissões.
A autenticação SAS utiliza a cadeia de conexão do seu namespace Hubs de Eventos do Azure para acesso delegado a Event Hubs para Kafka. Se optar por usar Assinaturas de Acesso Partilhado como credenciais, precisa de gerir a cadeia de ligação sozinho.
Pré-requisitos
Assinatura do Azure - crie uma gratuitamente.
Kit de Desenvolvimento Java (JDK) versão 8 ou superior.
Apache Maven, versão 3.2 ou superior.
cURL ou um utilitário HTTP semelhante para testar a funcionalidade.
Azure Cloud Shell ou CLI do Azure 2.37.0 ou superior.
Um hub de eventos no Azure. Se não tiveres um, criar um hub de eventos usando Azure portal.
Um aplicativo Spring Boot. Se você não tiver um, crie um projeto Maven com o Spring Initializr. Certifique-se de selecionar Maven Project e, em Dependências, adicione as dependências Spring Web, Spring para Apache Kafka e Cloud Stream, depois selecione Java versão 8 ou superior.
Importante
O Spring Boot versão 2.5 ou superior é necessário para concluir as etapas neste tutorial.
Preparar credenciais
O Hubs de Eventos do Azure suporta a utilização do Microsoft Entra ID para autorizar pedidos aos recursos do Event Hubs. Com Microsoft Entra ID, pode usar Azure controlo de acesso baseado em funções (Azure RBAC) para conceder permissões a uma entidade de segurança, que pode ser um utilizador ou uma entidade de serviço de aplicação.
Se quiser executar este exemplo localmente com autenticação Microsoft Entra, certifique-se de que a sua conta de utilizador foi autenticada através do Azure Toolkit for IntelliJ, Visual Studio Code Azure Account plugin ou CLI do Azure. Além disso, certifique-se de que a conta recebeu permissões suficientes.
Nota
Ao usar conexões sem senha, você precisa conceder à sua conta acesso aos recursos. No Hubs de Eventos do Azure, atribui as funções Hubs de Eventos do Azure Data Receiver e Hubs de Eventos do Azure Data Sender à conta Microsoft Entra que estás a usar atualmente. Para mais informações sobre a concessão de funções de acesso, consulte Atribuir Azure funções usando o portal Azure e Autorizar o acesso aos recursos do Event Hubs usando Microsoft Entra ID.
Enviar e receber mensagens do Hubs de Eventos do Azure
Com um hub de eventos do Azure, pode enviar e receber mensagens usando o Spring Cloud Azure.
Para instalar o módulo Spring Cloud Azure Starter, 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.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se estiveres a usar o Spring Boot 4.0.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para7.2.0.Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para6.2.0.Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para5.25.0.Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão
spring-cloud-azure-dependenciescomo4.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, veja Qual Versão do Spring Cloud Azure Devo Usar.
O artefacto Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Codificar a aplicação
Use os seguintes passos para configurar a sua aplicação para produzir e consumir mensagens usando o Hubs de Eventos do Azure.
Configure as credenciais do hub de eventos adicionando as seguintes propriedades ao seu arquivo application.properties .
spring.cloud.stream.kafka.binder.brokers=${AZ_EVENTHUBS_NAMESPACE_NAME}.servicebus.windows.net:9093 spring.cloud.function.definition=consume;supply spring.cloud.stream.bindings.consume-in-0.destination=${AZ_EVENTHUB_NAME} spring.cloud.stream.bindings.consume-in-0.group=$Default spring.cloud.stream.bindings.supply-out-0.destination=${AZ_EVENTHUB_NAME}Gorjeta
Se você estiver usando a versão
spring-cloud-azure-dependencies:4.3.0, então você deve adicionar a propriedadespring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sourcescom o valorcom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.Como
4.4.0, essa propriedade será adicionada automaticamente, portanto, não há necessidade de adicioná-la manualmente.A tabela a seguir descreve os campos na configuração:
Campo Descrição spring.cloud.stream.kafka.binder.brokersEspecifica o ponto de extremidade do Hubs de Eventos do Azure. spring.cloud.stream.bindings.consume-in-0.destinationEspecifica o hub de eventos de destino de entrada, que para este tutorial é o hub criado anteriormente. spring.cloud.stream.bindings.consume-in-0.groupEspecifica um Grupo de Consumidores do Hubs de Eventos do Azure, que pode definir para $Defaultpara usar o grupo básico de consumidores criado ao criar a sua instância do Hubs de Eventos do Azure.spring.cloud.stream.bindings.supply-out-0.destinationEspecifica o hub de eventos de destino de saída, que para este tutorial é o mesmo que o destino de entrada. Nota
Se você habilitar a criação automática de tópicos, certifique-se de adicionar o item de configuração
spring.cloud.stream.kafka.binder.replicationFactor, com o valor definido como pelo menos1. Para obter mais informações, consulte Guia de referência do Spring Cloud Stream Kafka Binder.Edite o arquivo de classe de inicialização para mostrar o seguinte conteúdo.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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 org.springframework.messaging.support.GenericMessage; import reactor.core.publisher.Flux; import reactor.core.publisher.Sinks; import java.util.function.Consumer; import java.util.function.Supplier; @SpringBootApplication public class EventHubKafkaBinderApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubKafkaBinderApplication.class); private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer(); public static void main(String[] args) { SpringApplication.run(EventHubKafkaBinderApplication.class, args); } @Bean public Supplier<Flux<Message<String>>> supply() { return ()->many.asFlux() .doOnNext(m->LOGGER.info("Manually sending message {}", m)) .doOnError(t->LOGGER.error("Error encountered", t)); } @Bean public Consumer<Message<String>> consume() { return message->LOGGER.info("New message received: '{}'", message.getPayload()); } @Override public void run(String... args) { many.emitNext(new GenericMessage<>("Hello World"), Sinks.EmitFailureHandler.FAIL_FAST); } }Gorjeta
Neste tutorial, não há operações de autenticação nas configurações ou no código. No entanto, a ligação aos serviços do Azure requer autenticação. Para completar a autenticação, precisa de usar o Azure Identity. O Spring Cloud Azure utiliza
DefaultAzureCredential, que a biblioteca Azure Identity fornece para te ajudar a obter credenciais sem quaisquer alterações de código.DefaultAzureCredentialSuporta vários métodos de autenticação e determina qual método usar em tempo de execução. Essa abordagem permite que seu aplicativo use diferentes métodos de autenticação em ambientes diferentes (como ambientes locais e de produção) sem implementar código específico do ambiente. Para obter mais informações, consulte DefaultAzureCredential.Para completar a autenticação em ambientes de desenvolvimento locais, pode usar CLI do Azure, Visual Studio Code, PowerShell ou outros métodos. Para mais informações, consulte autenticação do Azure em ambientes de desenvolvimento Java. Para completar a autenticação em ambientes de alojamento Azure, recomendamos a utilização da identidade gerida atribuída pelo utilizador. Para mais informações, consulte O que são identidades geridas para Azure recursos?
Inicie a aplicação. Mensagens como o exemplo a seguir serão postadas no log do aplicativo:
Kafka version: 3.0.1 Kafka commitId: 62abe01bee039651 Kafka startTimeMs: 1622616433956 New message received: 'Hello World'
Implementar no 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.