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 como configurar um Spring Cloud Stream Binder baseado em Java para usar os Hubs de Eventos do Azure para Kafka para enviar e receber mensagens com os Hubs de Eventos do Azure. Para obter mais informações, consulte Uso dos Hubs de Eventos do Azure nas aplicações Apache Kafka
Neste tutorial, incluiremos dois métodos de autenticação: autenticação Microsoft Entra e autenticação SAS (Assinaturas de Acesso Compartilhado). A guia Sem senha mostra a autenticação do Microsoft Entra e a guia Cadeia de conexão mostra a autenticação SAS.
A autenticação do Microsoft Entra é um mecanismo para se conectar aos Hubs de Eventos do Azure para Kafka usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar identidades de usuário de banco de dados e outros serviços da Microsoft em um local central, o que simplifica o gerenciamento de permissões.
A autenticação SAS usa a cadeia de conexão do namespace dos Hubs de Eventos do Azure para o acesso delegado aos Hubs de Eventos para Kafka. Se você optar por usar Assinaturas de Acesso Compartilhado como credenciais, precisará gerenciar a cadeia de conexão sozinho.
Pré-requisitos
Uma assinatura do Azure - crie uma gratuitamente.
Java Development Kit (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 Azure CLI 2.37.0 ou superior.
Um hub de eventos do Azure. Se você não tiver um, crie um hub de eventos usando o portal do Azure.
Um aplicativo Spring Boot. Se você não tiver um, crie um projeto Maven com o Spring Initializr. Certifique-se de selecionar Projeto Maven e, em Dependências, adicione as dependências Spring Web, Spring for Apache Kafka e Cloud Stream e, em seguida, 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
Importante
A autenticação de cadeia de conexão não é mais suportada no Spring Cloud Azure 6.0.0 ou superior. Em vez disso, use conexões sem senha.
Os Hubs de Eventos do Azure dão suporte ao uso da ID do Microsoft Entra para autorizar solicitações a recursos de Hubs de Eventos. Com o Microsoft Entra ID, pode usar o controlo de acesso baseado em função do Azure (Azure RBAC) para conceder permissões a um principal de segurança, que pode ser um utilizador ou um principal de serviço de aplicação.
Se quiser executar este exemplo localmente com a autenticação do Microsoft Entra, certifique-se de que a sua conta de utilizador foi autenticada através do Kit de Ferramentas do Azure para IntelliJ, do plug-in da Conta do Azure do Visual Studio Code ou da 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. Nos Hubs de Eventos do Azure, atribua as funções Azure Event Hubs Data Receiver e Azure Event Hubs Data Sender à conta Microsoft Entra que está a usar no momento. Para obter mais informações sobre como conceder funções de acesso, consulte Atribuir funções do Azure usando o portal do Azure e Autorizar acesso a recursos de Hubs de Eventos usando a ID do Microsoft Entra.
Enviar e receber mensagens dos Hubs de Eventos do Azure
Com um hub de eventos do Azure, você 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 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>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se estiver a utilizar o Spring Boot 3.0.x-3.4.x, certifique-se de que define a
spring-cloud-azure-dependenciesversão como5.23.0.Se estiver a utilizar o Spring Boot 2.x, certifique-se de que define a
spring-cloud-azure-dependenciesversão como4.20.0.Esta lista de materiais (BOM) deve ser configurada na
<dependencyManagement>seção do teu ficheiro 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 utilizada para este BOM, consulte Qual versão do Spring Cloud Azure devo usar.
O artefato Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Codificar a aplicação
Use as etapas a seguir para configurar seu aplicativo para produzir e consumir mensagens usando os Hubs de Eventos do Azure.
Importante
A autenticação de cadeia de conexão não é mais suportada no Spring Cloud Azure 6.0.0 ou superior. Em vez disso, use conexões sem senha.
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 endpoint dos Azure Event Hubs. 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 dos Hubs de Eventos do Azure, que pode definir para $Defaulta fim de usar o grupo de consumidores básico criado quando criou a sua instância dos 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, conectar-se aos serviços do Azure requer autenticação. Para concluir a autenticação, você precisa usar a Identidade do Azure. O Spring Cloud Azure usa
DefaultAzureCredential, que a biblioteca de identidade do Azure fornece para ajudar a obter credenciais sem 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 concluir a autenticação em ambientes de desenvolvimento local, você pode usar a CLI do Azure, o Visual Studio Code, o PowerShell ou outros métodos. Para obter mais informações, consulte Autenticação do Azure em ambientes de desenvolvimento Java. Para concluir a autenticação em ambientes de hospedagem do Azure, recomendamos o uso da identidade gerenciada atribuída pelo usuário. Para obter mais informações, consulte O que são identidades gerenciadas para recursos do Azure?
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'
Implantar nos Azure Spring Apps
Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. O 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.