Usare Spring Kafka con Hub eventi di Azure per l'API Kafka
Questa esercitazione illustra come configurare uno strumento Spring Cloud Stream Binder basato su Java per l'uso di Hub eventi di Azure per Kafka per l'invio e la ricezione di messaggi con Hub eventi di Azure. Per altre informazioni, vedere Usare Hub eventi di Azure dalle applicazioni Apache Kafka
In questa esercitazione verranno inclusi due metodi di autenticazione: autenticazione di Microsoft Entra e autenticazione di firme di accesso condiviso (SAS). La scheda Senza password mostra l'autenticazione di Microsoft Entra e la scheda Stringa di connessione mostra l'autenticazione sas.
L'autenticazione di Microsoft Entra è un meccanismo per la connessione a Hub eventi di Azure per Kafka usando le identità definite in Microsoft Entra ID. Con l'autenticazione Microsoft Entra è possibile gestire centralmente le identità degli utenti del database e di altri servizi Microsoft semplificando la gestione delle autorizzazioni.
L'autenticazione sas usa la stringa di connessione dello spazio dei nomi Hub eventi di Azure per l'accesso delegato a Hub eventi per Kafka. Se si sceglie di usare le firme di accesso condiviso come credenziali, è necessario gestire manualmente il stringa di connessione.
Prerequisiti
Una sottoscrizione di Azure: creare un account gratuitamente.
Java Development Kit (JDK) versione 8 o successiva.
Apache Maven versione 3.2 o successiva.
cURL o un'utilità HTTP simile per testare la funzionalità.
Azure Cloud Shell o l'interfaccia della riga di comando di Azure 2.37.0 o versione successiva.
Un hub eventi di Azure. Se non è disponibile, creare un hub eventi usando portale di Azure.
Applicazione Spring Boot. Se non è disponibile, creare un progetto Maven con Spring Initializr. Assicurarsi di selezionare Progetto Maven e, in Dipendenze, aggiungere le dipendenze Spring Web, Spring per Apache Kafka e Cloud Stream , quindi selezionare Java versione 8 o successiva.
Importante
Spring Boot versione 2.5 o successiva è necessario per completare i passaggi di questa esercitazione.
Preparare le credenziali
Hub eventi di Azure supporta l'utilizzo di Microsoft Entra ID per autorizzare le richieste alle risorse di Hub eventi. Con Microsoft Entra ID è possibile usare il controllo degli accessi in base al ruolo di Azure per concedere le autorizzazioni a un'entità di sicurezza, che può essere un utente o un'entità servizio dell'applicazione.
Se si vuole eseguire questo esempio in locale con l'autenticazione Microsoft Entra, assicurarsi che l'account utente sia stato autenticato tramite Azure Toolkit for IntelliJ, il plug-in dell'account azure di Visual Studio Code o l'interfaccia della riga di comando di Azure. Assicurarsi inoltre che all'account siano state concesse autorizzazioni sufficienti.
Nota
Quando si usano connessioni senza password, è necessario concedere all'account l'accesso alle risorse. In Hub eventi di Azure assegnare il Azure Event Hubs Data Receiver
ruolo e Azure Event Hubs Data Sender
all'account Microsoft Entra in uso. Per altre informazioni sulla concessione dei ruoli di accesso, vedere Assegnare i ruoli di Azure usando il portale di Azure e Autorizzare l'accesso alle risorse di Hub eventi usando Microsoft Entra ID.
Inviare e ricevere messaggi da Hub eventi di Azure
Con un hub eventi di Azure è possibile inviare e ricevere messaggi usando Spring Cloud Azure.
Per installare il modulo Spring Cloud Azure Starter, aggiungere le dipendenze seguenti al file pom.xml :
Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Nota
Se si usa Spring Boot 2.x, assicurarsi di impostare la
spring-cloud-azure-dependencies
versione su4.19.0
. Questa distinta base deve essere configurata nella<dependencyManagement>
sezione del file di pom.xml . In questo modo tutte le dipendenze di Spring Cloud Azure usano la stessa versione. Per altre informazioni sulla versione usata per questa distinta base, vedere La versione di Spring Cloud azure da usare.Artefatto Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Codice dell'applicazione
Usare la procedura seguente per configurare l'applicazione per produrre e utilizzare messaggi usando Hub eventi di Azure.
Configurare le credenziali dell'hub eventi aggiungendo le proprietà seguenti al file 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}
Suggerimento
Se si usa la versione
spring-cloud-azure-dependencies:4.3.0
, è necessario aggiungere la proprietàspring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources
con il valorecom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration
.Poiché
4.4.0
, questa proprietà verrà aggiunta automaticamente, quindi non è necessario aggiungerla manualmente.La tabella seguente descrive i campi nella configurazione:
Campo Descrizione spring.cloud.stream.kafka.binder.brokers
Specifica l'endpoint Hub eventi di Azure. spring.cloud.stream.bindings.consume-in-0.destination
Specifica l'hub eventi di destinazione di input, che per questa esercitazione è l'hub creato in precedenza. spring.cloud.stream.bindings.consume-in-0.group
Specifica un gruppo di consumer da Hub eventi di Azure, che è possibile impostare $Default
su per usare il gruppo di consumer di base creato al momento della creazione dell'istanza di Hub eventi di Azure.spring.cloud.stream.bindings.supply-out-0.destination
Specifica l'hub eventi di destinazione di output, che per questa esercitazione corrisponde alla destinazione di input. Nota
Se si abilita la creazione automatica di argomenti, assicurarsi di aggiungere l'elemento
spring.cloud.stream.kafka.binder.replicationFactor
di configurazione , con il valore impostato su almeno 1. Per altre informazioni, vedere Spring Cloud Stream Kafka Binder Reference Guide (Guida di riferimento al binder Kafka di Spring Cloud).Modificare il file della classe di avvio per visualizzare il contenuto seguente.
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); } }
Suggerimento
In questa esercitazione non sono presenti operazioni di autenticazione nelle configurazioni o nel codice. Tuttavia, la connessione ai servizi di Azure richiede l'autenticazione. Per completare l'autenticazione, è necessario usare Identità di Azure. Spring Cloud Azure usa
DefaultAzureCredential
, che la libreria di identità di Azure fornisce per ottenere le credenziali senza modifiche al codice.DefaultAzureCredential
supporta più metodi di autenticazione e determina il metodo da usare in fase di esecuzione. Questo approccio consente all'app di usare metodi di autenticazione diversi in ambienti diversi (ad esempio ambienti locali e di produzione) senza implementare codice specifico dell'ambiente. Per altre informazioni, vedere DefaultAzureCredential.Per completare l'autenticazione negli ambienti di sviluppo locali, è possibile usare l'interfaccia della riga di comando di Azure, Visual Studio Code, PowerShell o altri metodi. Per altre informazioni, vedere Autenticazione di Azure in ambienti di sviluppo Java. Per completare l'autenticazione negli ambienti di hosting di Azure, è consigliabile usare l'identità gestita assegnata dall'utente. Per altre informazioni, vedere Informazioni sulle identità gestite per le risorse di Azure
Avviare l’applicazione. I messaggi come l'esempio seguente verranno inseriti nel log applicazioni:
Kafka version: 3.0.1 Kafka commitId: 62abe01bee039651 Kafka startTimeMs: 1622616433956 New message received: 'Hello World'
Distribuire in Azure Spring Apps
Ora che l'applicazione Spring Boot è in esecuzione in locale, è possibile spostarla nell'ambiente di produzione. Azure Spring Apps semplifica la distribuzione di applicazioni Spring Boot in Azure senza modifiche al codice. Il servizio gestisce l'infrastruttura delle applicazioni Spring per consentire agli sviluppatori di concentrarsi sul codice. Azure Spring Apps fornisce la gestione del ciclo di vita tramite funzionalità complete di monitoraggio e diagnostica, gestione della configurazione, individuazione dei servizi, integrazione di CI/CD, distribuzioni blu/verde e altro ancora. Per distribuire l'applicazione in Azure Spring Apps, vedere Distribuire la prima applicazione in Azure Spring Apps.