Partager via


Utiliser Spring Kafka avec Azure Event Hubs pour l’API Kafka

Il vous guide également dans la configuration d'un Spring Cloud Stream Binder en Java pour exploiter Azure Event Hubs for Kafka afin d'envoyer et de recevoir des messages via Azure Event Hubs. Pour plus d'informations, consultez Utiliser Azure Event Hubs à partir d'applications Apache Kafka

Dans ce tutoriel, nous inclurons deux méthodes d'authentification : Authentification Microsoft Entra et Authentification par signatures d'accès partagées (SAS). L'onglet Sans mot de passe présente l'authentification Microsoft Entra et l'onglet Chaîne de connexion présente l'authentification SAS.

L'authentification avec Microsoft Entra ID est un mécanisme qui permet de se connecter à Azure Event Hubs for Kafka à l'aide d'identités définies dans Microsoft Entra ID. 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 par SAS utilise la chaîne de connexion de votre espace de noms Azure Event Hubs pour fournir un accès délégué à Event Hubs for Kafka. Si vous choisissez d'utiliser des signatures d'accès partagées comme informations d'identification, vous devez gérer vous-même la chaîne de connexion.

Prérequis

Important

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 requêtes de ressources Event Hubs. Avec Microsoft Entra ID, vous pouvez utiliser le contrôle d'accès basé sur les rôles d'Azure (Azure RBAC) pour accorder des permissions à 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 en utilisant l'authentification via Microsoft Entra, assurez-vous que votre compte utilisateur est bien authentifié via Azure Toolkit for IntelliJ, le plug-in Azure Account de Visual Studio Code, ou encore 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, attribuez 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'attribution de rôles d'accès, consultez les sections Attribuer 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 depuis des hubs d'événements Azure

Avec un hub d'événements Azure, vous pouvez envoyer et recevoir des messages en utilisant Spring Cloud Azure.

Pour installer le module Spring Cloud Azure Starter, ajoutez les dépendances suivantes à votre fichier pom.xml :

  • La nomenclature Spring Cloud Azure :

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.17.1</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Remarque

    Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version spring-cloud-azure-dependencies sur 4.19.0. Cette nomenclature doit être configurée dans la section <dependencyManagement> de votre fichier pom.xml. Cela permet de s'assurer que toutes les dépendances de Spring Cloud Azure utilisent la même version. Pour plus d'informations sur la version utilisée pour cette nomenclature, consultez Quelle version de Spring Cloud Azure dois-je utiliser.

  • Artefact Spring Cloud Azure Starter :

    <dependency>
       <groupId>com.azure.spring</groupId>
       <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

Coder l’application

Suivez les étapes ci-dessous pour configurer votre application afin qu'elle produise et consomme des messages via Azure Event Hubs.

  1. 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.sources avec la valeur com.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 Description
    spring.cloud.stream.kafka.binder.brokers Indiquez le point de terminaison d'Azure Event Hubs.
    spring.cloud.stream.bindings.consume-in-0.destination Dé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.group Spécifie un groupe de consommateurs d'Azure Event Hubs, que vous pouvez définir sur $Default afin d'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 Dé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 rubrique, veillez à ajouter l’élément de configuration spring.cloud.stream.kafka.binder.replicationFactor, avec une valeur minimale de 1. Pour plus d’informations, consultez Spring Cloud Stream Kafka Binder Reference Guide.

  2. 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. Cependant, 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 Azure Identity fournit pour vous aider à obtenir des informations d'identification sans modifier le 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 réaliser 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 la section Authentification Azure dans les environnements de développement Java. Pour compléter l'authentification dans les environnements d'hébergement Azure, nous vous recommandons d'utiliser l'identité gérée attribuée à l'utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?

  3. 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 des 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 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, voir Déployer votre première application sur Azure Spring Apps.

Étapes suivantes