Partager via


Démarrage rapide : Envoyer des événements à Azure Event Hubs ou recevoir des événements

Dans ce guide de démarrage rapide, vous allez apprendre à envoyer et recevoir des événements à partir d’un hub d’événements Azure à l’aide du package Java azure-messaging-eventhubs .

Conseil / Astuce

Si vous utilisez des ressources Azure Event Hubs dans une application Spring, nous vous recommandons de considérer Spring Cloud Azure comme alternative. Azure Spring Cloud est un projet open source qui fournit une intégration de Spring fluide aux services Azure. Pour en savoir plus sur Spring Cloud Azure et voir un exemple d’utilisation d’Event Hubs, consultez Spring Cloud Stream avec Azure Event Hubs.

Conditions préalables

Si vous débutez avec Azure Event Hubs, consultez la vue d’ensemble d’Event Hubs avant de suivre ce guide de démarrage rapide.

Pour effectuer ce démarrage rapide, vous avez besoin de ce qui suit :

  • Abonnement Microsoft Azure. Pour utiliser les services Azure, y compris Azure Event Hubs, vous avez besoin d’un abonnement. Si vous n’avez pas de compte Azure, vous pouvez vous inscrire à un essai gratuit ou utiliser les avantages de votre abonnement MSDN quand vous créez un compte.
  • Environnement de développement Java. Ce guide de démarrage rapide utilise Eclipse. Le Kit de développement Java (JDK) avec la version 8 ou ultérieure est requis.
  • Créez un espace de noms Event Hubs et un Event Hub. La première étape consiste à utiliser le portail Azure pour créer un espace de noms de type Event Hubs et obtenir les informations d’identification de gestion dont votre application a besoin pour communiquer avec le hub d’événements. Pour créer un espace de noms et un hub d’événements, suivez la procédure décrite dans cet article. Ensuite, obtenez la chaîne de connexion de l’espace de noms Event Hubs en suivant les instructions de l’article : Obtenir la chaîne de connexion. Vous utiliserez la chaîne de connexion plus loin dans ce guide de démarrage rapide.

Envoyer des événements

Cette section vous montre comment créer une application Java pour envoyer des événements à un hub d’événements.

Ajouter une référence à la bibliothèque Azure Event Hubs

Tout d’abord, créez un projet Maven pour une application console/shell dans votre environnement de développement Java favori. Mettez à jour le pom.xml fichier comme suit. La bibliothèque cliente Java pour Event Hubs est disponible dans le référentiel central Maven.

		<dependency>
		    <groupId>com.azure</groupId>
		    <artifactId>azure-messaging-eventhubs</artifactId>
		    <version>5.20.2</version>
		</dependency>
		<dependency>
		    <groupId>com.azure</groupId>
		    <artifactId>azure-identity</artifactId>
		    <version>1.16.1</version>
		    <scope>compile</scope>
		</dependency>

Remarque

Mettez à jour la version vers la dernière version publiée dans le référentiel Maven.

Authentifier l’application sur Azure

Ce guide de démarrage rapide vous montre deux façons de vous connecter à Azure Event Hubs :

  • Sans mot de passe. Utilisez votre principal de sécurité dans Microsoft Entra ID et le contrôle d’accès en fonction du rôle (RBAC) pour vous connecter à un espace de noms Event Hubs. Vous n’avez pas besoin de vous soucier d’avoir des chaînes de connexion codées en dur dans votre code, dans un fichier de configuration ou dans un stockage sécurisé comme Azure Key Vault.
  • Chaîne de connexion. Utilisez une chaîne de connexion pour vous connecter à un espace de noms Event Hubs. Si vous débutez dans Azure, vous trouverez peut-être l’option de chaîne de connexion plus facile à suivre.

Nous vous recommandons d’utiliser l’option sans mot de passe dans les applications réelles et les environnements de production. Pour plus d’informations, consultez l’authentification et l’autorisation Service Bus et les connexions sans mot de passe pour les services Azure.

Attribuer des rôles à votre utilisateur Microsoft Entra

Lorsque vous développez localement, assurez-vous que le compte d’utilisateur qui se connecte à Azure Event Hubs dispose des autorisations appropriées. Vous avez besoin du rôle Propriétaire des données Azure Event Hubs pour envoyer et recevoir des messages. Pour vous attribuer ce rôle, vous avez besoin du rôle Administrateur de l’accès utilisateur ou d’un autre rôle qui inclut l’action Microsoft.Authorization/roleAssignments/write . Vous pouvez attribuer des rôles RBAC Azure à un utilisateur en utilisant le Portail Azure, Azure CLI ou Azure PowerShell. Pour plus d’informations, consultez la page Comprendre l’étendue pour Azure RBAC.

L’exemple suivant attribue le rôle Azure Event Hubs Data Owner à votre compte d’utilisateur, qui fournit un accès complet aux ressources Azure Event Hubs. Dans un scénario réel, suivez le principe des privilèges minimum pour accorder aux utilisateurs uniquement les autorisations minimales nécessaires à un environnement de production plus sécurisé.

Rôles intégrés Azure pour Azure Event Hubs

Pour Azure Event Hubs, la gestion des espaces de noms et de toutes les ressources associées via le portail Azure et l’API de gestion des ressources Azure est déjà protégée à l’aide du modèle RBAC Azure. Azure fournit les rôles intégrés suivants pour autoriser l’accès à un espace de noms Event Hubs :

Si vous souhaitez créer un rôle personnalisé, consultez Droits requis pour les opérations Service Bus.

Important

Dans la plupart des cas, la propagation de l’attribution de rôle dans Azure peut prendre une ou deux minutes. Dans de rares cas, cela peut prendre jusqu’à huit minutes. Si vous recevez des erreurs d’authentification lorsque vous exécutez votre code pour la première fois, patientez quelques instants et réessayez.

  1. Dans le portail Azure, recherchez votre espace de noms Event Hubs à l’aide de la barre de recherche principale ou de la navigation gauche.

  2. Dans la page vue d’ensemble, sélectionnez Contrôle d’accès (IAM) dans le menu de gauche.

  3. Dans la page Contrôle d’accès (IAM), sélectionnez l’onglet Attributions de rôle.

  4. Sélectionnez + Ajouter dans le menu supérieur. Sélectionnez Ensuite Ajouter une attribution de rôle.

    Capture d’écran montrant comment attribuer un rôle.

  5. Utilisez la zone de recherche pour filtrer les résultats selon le rôle souhaité. Pour cet exemple, recherchez Azure Event Hubs Data Owner et sélectionnez le résultat correspondant. Ensuite, choisissez Suivant.

  6. Sous Attribuer l’accès à, sélectionnez Utilisateur, groupe ou principal de service. Choisissez ensuite + Sélectionner des membres.

  7. Dans la boîte de dialogue, recherchez votre nom d’utilisateur Microsoft Entra (généralement votre adresse e-mail user@domain ). Choisissez Sélectionner en bas de la boîte de dialogue.

  8. Sélectionnez Vérifier + affecter pour accéder à la page finale. Sélectionnez Vérifier + attribuer à nouveau pour terminer le processus.

Écrire du code pour envoyer des messages au hub d’événements

Ajoutez une classe nommée Senderet ajoutez le code suivant à la classe :

Important

  • Mettez à jour <NAMESPACE NAME> avec le nom de votre espace de noms Event Hubs.
  • Mettez à jour <EVENT HUB NAME> avec le nom de votre event Hub.
package ehubquickstart;

import com.azure.messaging.eventhubs.*;
import java.util.Arrays;
import java.util.List;

import com.azure.identity.*;

public class SenderAAD {

    // replace <NAMESPACE NAME> with the name of your Event Hubs namespace.
    // Example: private static final String namespaceName = "contosons.servicebus.windows.net";
    private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net";

    // Replace <EVENT HUB NAME> with the name of your event hub. 
    // Example: private static final String eventHubName = "ordersehub";
    private static final String eventHubName = "<EVENT HUB NAME>";

    public static void main(String[] args) {
        publishEvents();
    }
    /**
     * Code sample for publishing events.
     * @throws IllegalArgumentException if the EventData is bigger than the max batch size.
     */
    public static void publishEvents() {
        // create a token using the default Azure credential        
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
                .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
                .build();

        // create a producer client        
        EventHubProducerClient producer = new EventHubClientBuilder()        
            .fullyQualifiedNamespace(namespaceName)
            .eventHubName(eventHubName)
            .credential(credential)
            .buildProducerClient();

        // sample events in an array
        List<EventData> allEvents = Arrays.asList(new EventData("Foo"), new EventData("Bar"));

        // create a batch
        EventDataBatch eventDataBatch = producer.createBatch();

        for (EventData eventData : allEvents) {
            // try to add the event from the array to the batch
            if (!eventDataBatch.tryAdd(eventData)) {
                // if the batch is full, send it and then create a new batch
                producer.send(eventDataBatch);
                eventDataBatch = producer.createBatch();

                // Try to add that event that couldn't fit before.
                if (!eventDataBatch.tryAdd(eventData)) {
                    throw new IllegalArgumentException("Event is too large for an empty batch. Max size: "
                        + eventDataBatch.getMaxSizeInBytes());
                }
            }
        }
        // send the last batch of remaining events
        if (eventDataBatch.getCount() > 0) {
            producer.send(eventDataBatch);
        }
        producer.close();
    }   
}

Générez le programme et assurez-vous qu’il n’y a aucune erreur. Vous allez exécuter ce programme après avoir exécuté le programme récepteur.

Recevoir des événements

Le code de ce tutoriel est basé sur l’exemple EventProcessorClient sur GitHub, que vous pouvez examiner pour voir l’application de travail complète.

Suivez ces recommandations lorsque vous utilisez le Stockage Blob Azure en tant que magasin de points de contrôle :

  • Utilisez un conteneur distinct pour chaque groupe de consommateurs. Vous pouvez utiliser le même compte de stockage, mais utiliser un conteneur par groupe.
  • N’utilisez pas le compte de stockage pour autre chose.
  • N’utilisez pas le conteneur pour tout autre chose.
  • Créez le compte de stockage dans la même région que l’application déployée. Si l’application est locale, essayez de choisir la région la plus proche possible.

Sur la page Compte de stockage du Portail Azure, dans la section Service BLOB, vérifiez que les paramètres suivants sont désactivés.

  • Espace de noms hiérarchique
  • Suppression réversible de blob
  • Gestion des versions

Créer un stockage Azure et un conteneur d’objets blob

Dans cette introduction rapide, vous utilisez Azure Storage (plus précisément, Blob Storage) comme magasin de points de contrôle. Le point de contrôle est un processus par lequel un processeur d’événements marque ou valide la position du dernier événement traité avec succès dans une partition. Le marquage d’un point de contrôle est généralement effectué dans la fonction qui traite les événements. Pour en savoir plus sur le point de contrôle, consultez Processeur d’événements.

Suivez les étapes ci-dessous pour créer un compte Stockage Azure.

  1. Création d’un compte de stockage Azure
  2. Créer un conteneur d’objets blob
  3. S’authentifier auprès du conteneur d’objets blob

Lorsque vous développez localement, assurez-vous que le compte d’utilisateur qui accède aux données d’objet blob dispose des autorisations appropriées. Pour lire et écrire des données d’objet blob, vous avez besoin de Contributeur aux données Blob du stockage. Pour vous attribuer ce rôle, vous devez disposer du rôle Administrateur de l’accès utilisateur ou d’un autre rôle qui inclut l’action Microsoft.Authorization/roleAssignments/write . Vous pouvez attribuer des rôles RBAC Azure à un utilisateur en utilisant le Portail Azure, Azure CLI ou Azure PowerShell. Pour plus d’informations, consultez Comprendre l’étendue du contrôle d’accès en fonction du rôle (RBAC).

Dans ce scénario, vous attribuez des autorisations à votre compte d’utilisateur, délimitées au compte de stockage, pour suivre le principe du privilège minimum. Cette pratique offre aux utilisateurs uniquement les autorisations minimales nécessaires et crée des environnements de production plus sécurisés.

L’exemple suivant attribue le rôle Contributeur aux données blob de stockage à votre compte d’utilisateur, qui fournit à la fois un accès en lecture et en écriture aux données blob dans votre compte de stockage.

Important

Dans la plupart des cas, la propagation de l’attribution de rôle dans Azure peut prendre une ou deux minutes. Dans de rares cas, cela peut prendre jusqu’à huit minutes. Si vous recevez des erreurs d’authentification lorsque vous exécutez votre code pour la première fois, patientez quelques instants et réessayez.

  1. Dans le Portail Azure, recherchez votre compte de stockage à l’aide de la barre de recherche principale ou de la navigation gauche.

  2. Dans la page du compte de stockage, sélectionnez Contrôle d’accès (IAM) dans le menu de gauche.

  3. Dans la page Contrôle d’accès (IAM), sélectionnez l’onglet Attributions de rôle.

  4. Sélectionnez + Ajouter dans le menu supérieur. Sélectionnez Ensuite Ajouter une attribution de rôle.

    Capture d’écran montrant comment attribuer un rôle de compte de stockage.

  5. Utilisez la zone de recherche pour filtrer les résultats selon le rôle souhaité. Pour cet exemple, recherchez Contributeur aux données Blob du stockage. Sélectionnez le résultat correspondant, puis choisissez Suivant.

  6. Sous Attribuer l’accès à, sélectionnez Utilisateur, groupe ou principal de service, puis sélectionnez + Sélectionner des membres.

  7. Dans la boîte de dialogue, recherchez votre nom d’utilisateur Microsoft Entra (généralement votre adresse e-mail user@domain), puis choisissez Sélectionner en bas de la boîte de dialogue.

  8. Sélectionnez Vérifier + affecter pour accéder à la page finale. Sélectionnez Vérifier + attribuer à nouveau pour terminer le processus.

Ajouter des bibliothèques Event Hubs à votre projet Java

Ajoutez les dépendances suivantes dans le fichier pom.xml.

	<dependencies>
		<dependency>
		    <groupId>com.azure</groupId>
		    <artifactId>azure-messaging-eventhubs</artifactId>
		    <version>5.20.2</version>
		</dependency>
		<dependency>
		    <groupId>com.azure</groupId>
		    <artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
		    <version>1.20.6</version>
		</dependency>
		<dependency>
		    <groupId>com.azure</groupId>
		    <artifactId>azure-identity</artifactId>
		    <version>1.16.1</version>
		    <scope>compile</scope>
		</dependency>	
	</dependencies>
  1. Ajoutez les instructions suivantes import en haut du fichier Java.

    import com.azure.messaging.eventhubs.*;
    import com.azure.messaging.eventhubs.checkpointstore.blob.BlobCheckpointStore;
    import com.azure.messaging.eventhubs.models.*;
    import com.azure.storage.blob.*;
    import java.util.function.Consumer;
    
    import com.azure.identity.*;
    
  2. Créez une classe nommée Receiver, puis ajoutez les variables de chaîne suivantes à la classe. Remplacez les espaces réservés par les valeurs correctes.

    Important

    Remplacez les espaces réservés par les valeurs correctes.

    • <NAMESPACE NAME> par le nom de votre espace de noms Event Hubs.
    • <EVENT HUB NAME> par le nom de votre instance Event Hub dans l'espace de noms.
    private static final String namespaceName = "<NAMESPACE NAME>.servicebus.windows.net";
    private static final String eventHubName = "<EVENT HUB NAME>";
    
  3. Ajoutez la méthode suivante main à la classe.

    Important

    Remplacez les espaces réservés par les valeurs correctes.

    • <STORAGE ACCOUNT NAME> avec le nom de votre compte stockage Azure.
    • <CONTAINER NAME> par le nom du conteneur d’objets blob dans le compte de stockage.
    // create a token using the default Azure credential
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
            .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
            .build();
    
    // Create a blob container client that you use later to build an event processor client to receive and process events
    BlobContainerAsyncClient blobContainerAsyncClient = new BlobContainerClientBuilder()
            .credential(credential)
            .endpoint("https://<STORAGE ACCOUNT NAME>.blob.core.windows.net")
            .containerName("<CONTAINER NAME>")
            .buildAsyncClient();
    
    // Create an event processor client to receive and process events and errors.
    EventProcessorClient eventProcessorClient = new EventProcessorClientBuilder()
        .fullyQualifiedNamespace(namespaceName)
        .eventHubName(eventHubName)
        .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME)
        .processEvent(PARTITION_PROCESSOR)
        .processError(ERROR_HANDLER)
        .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient))            
        .credential(credential)
        .buildEventProcessorClient();
    
    System.out.println("Starting event processor");
    eventProcessorClient.start();
    
    System.out.println("Press enter to stop.");
    System.in.read();
    
    System.out.println("Stopping event processor");
    eventProcessorClient.stop();
    System.out.println("Event processor stopped.");
    
    System.out.println("Exiting process");  
    
  1. Ajoutez les deux méthodes d’assistance (PARTITION_PROCESSOR et ERROR_HANDLER) qui traitent les événements et les erreurs à la Receiver classe.

    public static final Consumer<EventContext> PARTITION_PROCESSOR = eventContext -> {
        PartitionContext partitionContext = eventContext.getPartitionContext();
        EventData eventData = eventContext.getEventData();
    
        System.out.printf("Processing event from partition %s with sequence number %d with body: %s%n",
            partitionContext.getPartitionId(), eventData.getSequenceNumber(), eventData.getBodyAsString());
    
        // Every 10 events received, it will update the checkpoint stored in Azure Blob Storage.
        if (eventData.getSequenceNumber() % 10 == 0) {
            eventContext.updateCheckpoint();
        }
    };
    
    public static final Consumer<ErrorContext> ERROR_HANDLER = errorContext -> {
        System.out.printf("Error occurred in partition processor for partition %s, %s.%n",
            errorContext.getPartitionContext().getPartitionId(),
            errorContext.getThrowable());
    };
    
  2. Générez le programme et assurez-vous qu’il n’y a aucune erreur.

Exécution des applications

  1. Exécutez d’abord l’application Récepteur .

  2. Ensuite, exécutez l’application Expéditeur .

  3. Dans la fenêtre De l’application Récepteur , vérifiez que les événements publiés par l’application Expéditeur s’affichent.

    Starting event processor
    Press enter to stop.
    Processing event from partition 0 with sequence number 331 with body: Foo
    Processing event from partition 0 with sequence number 332 with body: Bar
    
  4. Appuyez sur Entrée dans la fenêtre de l’application réceptrice pour arrêter l’application.

    Starting event processor
    Press enter to stop.
    Processing event from partition 0 with sequence number 331 with body: Foo
    Processing event from partition 0 with sequence number 332 with body: Bar
    
    Stopping event processor
    Event processor stopped.
    Exiting process
    

Consultez les exemples suivants sur GitHub :