Utiliser Spring Kafka avec Azure Event Hubs pour l’API Kafka
Ce tutoriel vous montre comment configurer un Spring Cloud Stream Binder basé sur Java afin d’utiliser Azure Event Hubs pour Kafka pour envoyer et recevoir des messages avec Azure Event Hubs. Pour plus d’informations, consultez Utiliser Azure Event Hubs à partir d’applications Apache Kafka
Dans ce tutoriel, nous allons inclure deux méthodes d’authentification : l’authentification Microsoft Entra et l’authentification SAP (Shared Access Signatures). L’onglet Sans mot de passe affiche l’authentification Microsoft Entra et l’onglet Chaîne de connexion affiche l’authentification SAP.
L’authentification Microsoft Entra est un mécanisme de connexion à Azure Event Hubs pour Kafka à l’aide d’identités définies dans l’ID Microsoft Entra. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités des utilisateurs de base de données et d’autres services Microsoft dans un emplacement centralisé, ce qui simplifie la gestion des autorisations.
L’authentification SAP utilise la chaîne de connexion de votre espace de noms Azure Event Hubs pour l’accès délégué à Event Hubs pour Kafka. Si vous choisissez d’utiliser des signatures d’accès partagé comme informations d’identification, vous devez gérer les chaîne de connexion par vous-même.
Prérequis
Un abonnement Azure - En créer un gratuitement
Kit de développement Java (JDK) version 8 ou ultérieure.
Apache Maven, version 3.2 ou ultérieure.
cURL ou un utilitaire HTTP similaire pour tester la fonctionnalité.
Azure Cloud Shell ou Azure CLI 2.37.0 ou version ultérieure.
Un hub d’événements Azure. Si vous n’en avez pas, créez un hub d’événements à l’aide de Portail Azure.
Une application Spring Boot. Si vous n’en avez pas, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Maven Project et, sous Dépendances, ajoutez les dépendances Spring Web, Spring pour Apache Kafka et Cloud Stream, puis sélectionnez Java version 8 ou ultérieure.
Important
Spring Boot version 2.5 ou ultérieure est nécessaire pour suivre les étapes décrites dans ce didacticiel.
Préparer les informations d’identification
Azure Event Hubs prend en charge l’utilisation de Microsoft Entra ID pour autoriser les requêtes de ressources Event Hubs. Avec l’ID Microsoft Entra, vous pouvez utiliser le contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour accorder des autorisations à un principal de sécurité, qui peut être un utilisateur ou un principal de service d’application.
Si vous souhaitez exécuter cet exemple localement avec l’authentification Microsoft Entra, assurez-vous que votre compte d’utilisateur s’est authentifié via le kit de ressources Azure pour IntelliJ, le plug-in de compte Azure Visual Studio Code ou Azure CLI. Vérifiez également que le compte a reçu des autorisations suffisantes.
Remarque
Lorsque vous utilisez des connexions sans mot de passe, vous devez accorder à votre compte l’accès aux ressources. Dans Azure Event Hubs, affectez le rôle et Azure Event Hubs Data Sender
le Azure Event Hubs Data Receiver
rôle au compte Microsoft Entra que vous utilisez actuellement. Pour plus d’informations sur l’octroi de rôles d’accès, consultez Affecter des rôles Azure à l’aide des Portail Azure et autoriser l’accès aux ressources Event Hubs à l’aide de l’ID Microsoft Entra.
Envoyer et recevoir des messages d’Azure Event Hubs
Avec un hub d’événements Azure, vous pouvez envoyer et recevoir des messages à l’aide de Spring Cloud Azure.
Pour installer le module Spring Cloud Azure Starter, ajoutez les dépendances suivantes à votre fichier pom.xml :
The Spring Cloud Azure Bill of Materials (BOM) :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.15.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Remarque
Si vous utilisez Spring Boot 2.x, veillez à définir la
spring-cloud-azure-dependencies
version4.19.0
sur . Cette facture de matériel (BOM) doit être configurée dans la<dependencyManagement>
section de votre fichier pom.xml . Cela garantit que toutes les dépendances Azure Spring Cloud utilisent la même version. Pour plus d’informations sur la version utilisée pour ce boM, consultez La version de Spring Cloud Azure à utiliser.Artefact Spring Cloud Azure Starter :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Coder l’application
Procédez comme suit pour configurer votre application pour produire et consommer des messages à l’aide d’Azure Event Hubs.
Configurez les informations d’identification event hub en ajoutant les propriétés suivantes à votre fichier 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}
Conseil
Si vous utilisez la version
spring-cloud-azure-dependencies:4.3.0
, vous devez ajouter la propriétéspring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources
avec la valeurcom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration
.Étant donné que
4.4.0
cette propriété sera ajoutée automatiquement, il n’est donc pas nécessaire de l’ajouter manuellement.Le tableau suivant décrit les champs de la configuration :
Champ Description spring.cloud.stream.kafka.binder.brokers
Spécifie le point de terminaison Azure Event Hubs. spring.cloud.stream.bindings.consume-in-0.destination
Spécifie le hub d’événements de destination d’entrée, qui pour ce didacticiel est le hub que vous avez créé précédemment. spring.cloud.stream.bindings.consume-in-0.group
Spécifie un groupe de consommateurs à partir d’Azure Event Hubs, que vous pouvez définir $Default
pour utiliser le groupe de consommateurs de base créé lors de la création de votre instance Azure Event Hubs.spring.cloud.stream.bindings.supply-out-0.destination
Spécifie le hub d’événements de destination de sortie, qui pour ce didacticiel est identique à la destination d’entrée. Remarque
Si vous activez la création automatique de rubriques, veillez à ajouter l’élément
spring.cloud.stream.kafka.binder.replicationFactor
de configuration, avec la valeur définie sur au moins 1. Pour plus d’informations, consultez Spring Cloud Stream Kafka Binder Reference Guide.Modifiez le fichier de classe de démarrage pour afficher le contenu suivant.
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); } }
Conseil
Dans ce tutoriel, il n’existe aucune opération d’authentification dans les configurations ou le code. Toutefois, la connexion aux services Azure nécessite une authentification. Pour effectuer l’authentification, vous devez utiliser Identité Azure. Spring Cloud Azure utilise
DefaultAzureCredential
, que la bibliothèque d’identités Azure fournit pour vous aider à obtenir des informations d’identification sans aucune modification du code.DefaultAzureCredential
prend en charge plusieurs méthodes d’authentification et détermine quelle méthode doit être utilisée au moment de l’exécution. Cette approche permet à votre application d’utiliser différentes méthodes d’authentification dans différents environnements (tels que les environnements locaux et de production) sans implémenter de code spécifique à l’environnement. Pour plus d’informations, consultez DefaultAzureCredential.Pour terminer l’authentification dans les environnements de développement locaux, vous pouvez utiliser Azure CLI, Visual Studio Code, PowerShell ou d’autres méthodes. Pour plus d’informations, consultez l’authentification Azure dans les environnements de développement Java. Pour terminer l’authentification dans les environnements d’hébergement Azure, nous vous recommandons d’utiliser l’identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?
Lancez l’application. Les messages comme l’exemple suivant seront publiés dans le journal de votre application :
Kafka version: 3.0.1 Kafka commitId: 62abe01bee039651 Kafka startTimeMs: 1622616433956 New message received: 'Hello World'
Déployer sur Azure Spring Apps
Maintenant que vous disposez de l’application Spring Boot en cours d’exécution localement, il est temps de le déplacer en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification de code. Le service gère l’infrastructure des applications Spring, ce qui permet aux développeurs de se concentrer sur leur code. Azure Spring Apps assure la gestion du cycle de vie en utilisant des outils complets, tels que la supervision et les diagnostics, la gestion des configurations, la découverte de services, l’intégration CI/CD, les déploiements bleus-verts, etc. Pour déployer votre application sur Azure Spring Apps, consultez Déployer votre première application sur Azure Spring Apps.