Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel vous montre comment configurer un classeur Spring Cloud Stream basé sur Java afin d’utiliser Azure Event Hubs pour Kafka pour l’envoi et la réception de 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 : authentification Microsoft Entra et Authentification SAP (Shared Access Signatures). L’onglet Passwordless affiche l’authentification Microsoft Entra et la chaîne Connection affiche l’authentification SAP.
L'authentification Microsoft Entra est un mécanisme de connexion à Azure Event Hubs pour Kafka en utilisant des identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités utilisateur de base de données et d’autres services Microsoft dans un emplacement central, ce qui simplifie la gestion des autorisations.
L'authentification SAS 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 connection string par vous-même.
Prérequis
Un abonnement Azure - créez-en un gratuitement.
Java Kit de développement (JDK) version 8 ou ultérieure.
Apache Maven, version 3.2 ou supérieure.
cURL ou un utilitaire HTTP similaire pour tester la fonctionnalité.
Azure Cloud Shell ou Azure CLI 2.37.0 ou version ultérieure.
Hub d’événements Azure. Si vous n'en avez pas, créez un hub d'événements à l'aide du 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 Dependencies, ajoutez le Spring Web, Spring pour Apache Kafka et Cloud Stream dépendances, puis sélectionnez Java version 8 ou ultérieure.
Importante
La version 2.5 ou supérieure de Spring Boot est nécessaire pour réaliser les étapes de ce tutoriel.
Préparation des informations d'identification
Azure Event Hubs prend en charge l’utilisation de Microsoft Entra ID pour autoriser les demandes adressées aux ressources Event Hubs. Avec Microsoft Entra ID, vous pouvez utiliser Azure contrôle d'accès en fonction du rôle (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 Azure Toolkit pour IntelliJ, le plugin de compte Azure pour Visual Studio Code ou Azure CLI. Vérifiez également que ce compte dispose des autorisations suffisantes.
Remarque
Lorsque vous optez pour des connexions sans mot de passe, il est nécessaire d'accorder à votre compte l'accès aux ressources concernées. Dans Azure Event Hubs, affectez le rôle Azure Event Hubs Data Receiver et Azure Event Hubs Data Sender au compte Microsoft Entra que vous utilisez actuellement. Pour plus d’informations sur l’octroi de rôles d’accès, consultez Assigner des rôles Azure à l’aide du portail Azure et Autoriser l’accès aux ressources Event Hubs à l’aide de Microsoft Entra ID.
Envoyer et recevoir des messages de 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 :
Le Bill of Materials (BOM) de Spring Cloud Azure :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Remarque
Si vous utilisez Spring Boot 4.0.x, veillez à mettre la
spring-cloud-azure-dependenciesversion à7.1.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.1.0.Si vous utilisez Spring Boot 3.1.x-3.5.x, veillez à définir la version
spring-cloud-azure-dependencies5.25.0.Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version
spring-cloud-azure-dependenciessur4.20.0.Cette liste de matériel (BOM) doit être configurée dans la section
<dependencyManagement>de votre fichier pom.xml. Cela garantit que toutes les dépendances spring Cloud Azure utilisent la même version.Pour plus d’informations sur la version utilisée pour ce boM, consultez Which Version of Spring Cloud Azure Should I Use.
L'artefact Starter de Spring Cloud Azure
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Coder l’application
Suivez les étapes suivantes pour configurer votre application pour produire et consommer des messages à l’aide de Azure Event Hubs.
Configurez les informations d'identification du hub d'événements 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.sourcesavec la valeurcom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration.Depuis
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 Descriptif spring.cloud.stream.kafka.binder.brokersSpécifie le point de terminaison Azure Event Hubs. spring.cloud.stream.bindings.consume-in-0.destinationDéfinissez le hub d'événements de destination d'entrée, qui, pour ce tutoriel, est le hub que vous avez créé auparavant. spring.cloud.stream.bindings.consume-in-0.groupSpécifie un groupe de consommateurs de Azure Event Hubs, que vous pouvez définir sur $Defaultafin d’utiliser le groupe de consommateurs de base créé lors de la création de votre instance de Azure Event Hubs.spring.cloud.stream.bindings.supply-out-0.destinationDéfinissez le hub d'événements de destination de sortie, qui, pour ce tutoriel, correspond au même hub que celui de la destination d'entrée. Remarque
Si vous activez la création automatique de rubriques, veillez à ajouter l’élément de configuration
spring.cloud.stream.kafka.binder.replicationFactor, avec la valeur définie sur au moins1. 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'y a pas d'opérations d'authentification dans les configurations ou le code. Toutefois, la connexion à Azure services nécessite une authentification. Pour terminer l’authentification, vous devez utiliser Azure Identity. Spring Cloud Azure utilise
DefaultAzureCredential, que la bibliothèque Azure Identity fournit pour vous aider à obtenir des informations d’identification sans aucune modification du code.DefaultAzureCredentialprend 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 Azure environnements d’hébergement, nous vous recommandons d’utiliser l’identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Qu’est-ce que les identités managées pour les ressources Azure ?
Lancez l’application. Les messages tels que l'exemple suivant seront affiché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 l'application Spring Boot fonctionne localement, il est temps de la mettre en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification du 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 fournit une gestion du cycle de vie à l’aide de la supervision et des diagnostics complets, de la gestion de la configuration, de la découverte de services, de l’intégration CI/CD, des déploiements bleu-vert, etc. Pour déployer votre application sur Azure Spring Apps, consultez Deploy your first application to Azure Spring Apps.