bibliothèque cliente Azure Event Grid pour Java - version 4.19.0
Azure Event Grid vous permet de créer facilement des applications avec les architectures basées sur des événements. Le service Event Grid gère entièrement tout le routage des événements de n’importe quelle source, vers n’importe quelle destination, pour n’importe quelle application. Les événements de service Azure et les événements personnalisés peuvent être publiés directement sur le service, où les événements peuvent ensuite être filtrés et envoyés à différents destinataires, tels que des gestionnaires intégrés ou des webhooks personnalisés. Pour en savoir plus sur Azure Event Grid : Qu’est-ce qu’Event Grid ?
Utilisez la bibliothèque cliente pour Azure Event Grid pour :
- Publier des événements sur le service Event Grid à l’aide de l’événement Event Grid, cloud Event 1.0 ou de schémas personnalisés
- Consommer des événements qui ont été remis aux gestionnaires d’événements
- Générer des jetons SAP pour authentifier les événements de publication du client dans Azure Event Grid rubriques
Sources | Documentation de référence sur l’API | Documentation | produitÉchantillons
Prise en main
Prérequis
- Kit de développement Java (JDK) avec la version 8 ou ultérieure
- Un abonnement Azure
- Une rubrique ou un domaine Event Grid . Pour créer la ressource, vous pouvez utiliser Portail Azure ou Azure CLI
Si vous utilisez Azure CLI, remplacez <your-resource-group-name>
et <your-resource-name>
par vos propres noms uniques et <location>
par un emplacement de service Azure valide.
Création d’une rubrique (Azure CLI)
az eventgrid topic create --location <location> --resource-group <your-resource-group-name> --name <your-resource-name>
Création d’un domaine (Azure CLI)
az eventgrid domain create --location <location> --resource-group <your-resource-group-name> --name <your-resource-name>
Inclure le package
Inclure le fichier de nomenclature
Incluez azure-sdk-bom dans votre projet pour dépendre de la version ga de la bibliothèque. Dans l’extrait de code suivant, remplacez l’espace réservé {bom_version_to_target} par le numéro de version. Pour en savoir plus sur la nomenclature, consultez le README BOM du KIT DE DÉVELOPPEMENT LOGICIEL AZURE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Incluez ensuite la dépendance directe dans la section des dépendances sans la balise de version.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventgrid</artifactId>
</dependency>
</dependencies>
Inclure une dépendance directe
Si vous souhaitez dépendre d’une version particulière de la bibliothèque qui n’est pas présente dans la nomenclature, ajoutez la dépendance directe à votre projet comme suit.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventgrid</artifactId>
<version>4.19.0</version>
</dependency>
Authentifier le client
Pour envoyer des événements, nous avons besoin d’un point de terminaison à envoyer et d’une certaine authentification pour le point de terminaison. L’authentification peut être une clé d’identification, une signature d’accès partagé ou une authentification par jeton Azure Active Directory. Le point de terminaison et la clé peuvent être obtenus via le portail Azure ou Azure CLI.
Point de terminaison
Le point de terminaison est répertorié dans le tableau de bord de la rubrique ou du domaine dans le portail Azure, ou peut être obtenu à l’aide de la commande suivante dans Azure CLI.
az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"
Clé d’accès
Les clés sont répertoriées sous l’onglet « Clés d’accès » du portail Azure ou peuvent être obtenues à l’aide de la commande suivante dans Azure CLI. Toutes les clés répertoriées fonctionnent.
az eventgrid topic key list --name <your-resource-name> --resource-group <your-resource-group-name>
Authentification par jeton Azure Active Directory (AAD)
Azure Event Grid fournit une intégration à Azure Active Directory (Azure AD) pour l’authentification basée sur l’identité des demandes.
Avec Azure AD, vous pouvez utiliser le contrôle d’accès en fonction du rôle (RBAC) pour accorder l’accès à vos ressources Azure Event Grid à des utilisateurs, des groupes ou des applications.
Pour envoyer des événements à une rubrique ou un domaine avec un TokenCredential
, le rôle « Expéditeur de données EventGrid » doit être attribué à l’identité authentifiée.
Création du client
Utilisation du point de terminaison et de la clé d’accès pour créer le client
Une fois que vous avez votre clé d’accès et votre point de terminaison de rubrique, vous pouvez créer le client d’éditeur comme suit :
Synchroniser le client qui fonctionne pour chaque développeur Java :
// For CloudEvent
EventGridPublisherClient<CloudEvent> cloudEventClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts CloudEvent schema>")
.credential(new AzureKeyCredential("<key for the endpoint>"))
.buildCloudEventPublisherClient();
// For EventGridEvent
EventGridPublisherClient<EventGridEvent> eventGridEventClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts EventGridEvent schema>")
.credential(new AzureKeyCredential("<key for the endpoint>"))
.buildEventGridEventPublisherClient();
// For custom event
EventGridPublisherClient<BinaryData> customEventClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts custom event schema>")
.credential(new AzureKeyCredential("<key for the endpoint>"))
.buildCustomEventPublisherClient();
ou un client asynchrone si votre pile technologique a une programmation réactive, telle que le réacteur de projet :
// For CloudEvent
EventGridPublisherAsyncClient<CloudEvent> cloudEventAsyncClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts CloudEvent schema>")
.credential(new AzureKeyCredential("<key for the endpoint>"))
.buildCloudEventPublisherAsyncClient();
// For EventGridEvent
EventGridPublisherAsyncClient<EventGridEvent> eventGridEventAsyncClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts EventGridEvent schema>")
.credential(new AzureKeyCredential("<key for the endpoint>"))
.buildEventGridEventPublisherAsyncClient();
// For custom event
EventGridPublisherAsyncClient<BinaryData> customEventAsyncClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts custom event schema>")
.credential(new AzureKeyCredential("<key for the endpoint>"))
.buildCustomEventPublisherAsyncClient();
Utilisation du point de terminaison et du jeton SAP pour créer le client
Si vous disposez d’une signature d’accès partagé (SAP) qui peut être utilisée pour envoyer des événements à une rubrique ou à un domaine Event Grid pendant une durée limitée, vous pouvez l’utiliser pour créer le client d’éditeur :
Synchroniser le client :
EventGridPublisherClient<CloudEvent> cloudEventClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts CloudEvent schema>")
.credential(new AzureSasCredential("<sas token that can access the endpoint>"))
.buildCloudEventPublisherClient();
Client asynchrone :
EventGridPublisherAsyncClient<CloudEvent> cloudEventAsyncClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts CloudEvent schema>")
.credential(new AzureSasCredential("<sas token that can access the endpoint>"))
.buildCloudEventPublisherAsyncClient();
Utilisation du point de terminaison et des informations d’identification de jeton Azure Active Directory (AAD) pour créer le client
Pour utiliser les informations d’identification du jeton AAD, incluez azure-identity
l’artefact en tant que dépendance. Pour plus d’informations, reportez-vous à azure-identity README .
Synchroniser le client :
EventGridPublisherClient<CloudEvent> cloudEventClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts CloudEvent schema>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildCloudEventPublisherClient();
Client asynchrone :
EventGridPublisherAsyncClient<CloudEvent> cloudEventClient = new EventGridPublisherClientBuilder()
.endpoint("<endpoint of your event grid topic/domain that accepts CloudEvent schema>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildCloudEventPublisherAsyncClient();
Créer un jeton SAS pour permettre à d’autres personnes d’envoyer des événements pendant une période limitée
Si vous souhaitez autoriser d’autres personnes à publier des événements dans votre rubrique ou domaine Event Grid pendant un certain temps, vous pouvez créer une signature d’accès partagé (SAS) pour ces personnes afin qu’elles puissent créer un EventGridPublisherClient
objet similaire à celui ci-dessus à utiliser AzureSasCredential
pour créer le client d’éditeur.
Voici un exemple de code pour créer une signature d’accès partagé qui expire après 20 minutes :
OffsetDateTime expiration = OffsetDateTime.now().plusMinutes(20);
String sasToken = EventGridPublisherClient
.generateSas("<your event grid endpoint>", new AzureKeyCredential("<key for the endpoint>"), expiration);
Utilisez BinaryData
.
Ce Kit de développement logiciel (SDK) utilise com.azure.util.BinaryData
pour représenter la charge utile des données des événements.
BinaryData
prend en charge la sérialisation et la désérialisation des objets via com.azure.core.util.BinaryData.fromObject(Object object)
des méthodes et toObject()
, qui utilisent un sérialiseur Json Jackson par défaut, ou fromObject(Object object, ObjectSerializer customSerializer)
des méthodes et toObject(Class<T> clazz, ObjectSerializer serializer)
, qui acceptent votre sérialiseur Json personnalisé.
Pour plus d’informations, consultez la documentation BinaryData .
Concepts clés
Pour plus d’informations sur les concepts généraux d’Event Grid : Concepts dans Azure Event Grid.
EventGridPublisherClient
EventGridPublisherClient
est utilisé pour envoyer des événements à une rubrique Event Grid ou à un domaine Event Grid.
EventGridPublisherAsyncClient
est la version asynchrone de EventGridPublisherClient
.
Schémas d’événement
Event Grid prend en charge plusieurs schémas pour l’encodage des événements. Lors de la création d’une rubrique ou d’un domaine Event Grid, vous spécifiez le schéma qui sera utilisé lors de la publication d’événements. Vous pouvez configurer votre rubrique pour utiliser un schéma personnalisé , mais il est plus courant d’utiliser le schéma EventGridEvent ou le schéma CloudEvent déjà défini.
CloudEvent est un projet Cloud Native Computing Foundation qui produit une spécification pour décrire les données d’événement de manière commune.
Le service Event Grid est compatible avec la spécification CloudEvent Quel que soit le schéma que votre rubrique ou domaine est configuré pour utiliser, EventGridPublisherClient
sera utilisé pour publier des événements sur celui-ci. Toutefois, vous devez utiliser le type correct pour l’instancier :
Schéma d’événement | Instanciation générique du client publisher |
---|---|
Événements Event Grid | EventGridPublisherClient<EventGridEvent> |
Événements cloud | EventGridPublisherClient<CloudEvent> |
Événements personnalisés | EventGridPublisherClient<BinaryData> |
L’utilisation d’un type incorrect entraîne une erreur BadRequest à partir du service et vos événements ne seront pas publiés. Utilisez cette commande Azure CLI pour interroger le schéma accepté par une rubrique ou un domaine Event Grid :
az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query inputSchema
Gestionnaires d’événements et désérialisation des événements.
EventGrid ne stocke aucun événement dans la rubrique ou le domaine Event Grid lui-même. Vous devez créer des abonnements à la rubrique ou au domaine EventGrid. Les événements envoyés à la rubrique ou au domaine sont stockés dans le point de terminaison de l’abonnement, également appelé « Gestionnaire d’événements ».
Vous pouvez utiliser le Kit de développement logiciel (SDK) du gestionnaire d’événements pour recevoir les événements dans la chaîne Json, puis utiliser ou EventGridEvent.fromString()
CloudEvent.fromString()
désérialiser les événements. La partie données des événements peut être en données binaires, string ou JSON.
Exemples
Envoi d’événements aux rubriques Event Grid
Les événements peuvent être envoyés dans , EventGridEvent
CloudEvent
ou dans un schéma personnalisé, comme indiqué dans Schémas d’événements.
La rubrique ou le domaine doit être configuré pour accepter le schéma envoyé. Par souci de simplicité, le client synchrone est utilisé pour les exemples, mais le client asynchrone a les mêmes noms de méthode.
Remarque : déterminez le schéma (événement cloud, événement event grid ou événement personnalisé) que la rubrique Event Grid accepte avant de commencer à envoyer.
Envoi EventGridEvent
à une rubrique qui accepte le schéma EventGridEvent
// Make sure that the event grid topic or domain you're sending to is able to accept the EventGridEvent schema.
List<EventGridEvent> events = new ArrayList<>();
User user = new User("John", "James");
events.add(new EventGridEvent("exampleSubject", "Com.Example.ExampleEventType", BinaryData.fromObject(user), "0.1"));
eventGridEventClient.sendEvents(events);
Envoi CloudEvent
à une rubrique qui accepte le schéma CloudEvent
// Make sure that the event grid topic or domain you're sending to is able to accept the CloudEvent schema.
List<CloudEvent> events = new ArrayList<>();
User user = new User("John", "James");
events.add(new CloudEvent("https://source.example.com", "Com.Example.ExampleEventType",
BinaryData.fromObject(user), CloudEventDataFormat.JSON, "application/json"));
cloudEventClient.sendEvents(events);
Envoi d’événements personnalisés à une rubrique qui accepte le schéma d’événement personnalisé
// Make sure that the event grid topic or domain you're sending to is able to accept the custom event schema.
List<BinaryData> events = new ArrayList<>();
events.add(BinaryData.fromObject(new HashMap<String, String>() {
{
put("id", UUID.randomUUID().toString());
put("time", OffsetDateTime.now().toString());
put("subject", "Test");
put("foo", "bar");
put("type", "Microsoft.MockPublisher.TestEvent");
put("data", "example data");
put("dataVersion", "0.1");
}
}));
customEventClient.sendEvents(events);
Envoi d’événements au domaine Event Grid
Un domaine Event Grid peut comporter des milliers de rubriques, mais n’a qu’un seul point de terminaison. Vous pouvez utiliser un domaine pour gérer un ensemble de rubriques associées. L’envoi d’événements aux rubriques d’un domaine Event Grid est identique à l’envoi d’événements à une rubrique Event Grid standard, sauf que vous devez spécifier le topic
d’un EventGridEvent
si le domaine accepte EventGridEvent
le schéma.
List<EventGridEvent> events = new ArrayList<>();
User user = new User("John", "James");
events.add(new EventGridEvent("com/example", "Com.Example.ExampleEventType", BinaryData.fromObject(user), "1")
.setTopic("yourtopic"));
eventGridEventClient.sendEvents(events);
Si le domaine accepte CloudEvent
le schéma, l’attribut CloudEvent configuré pour mapper le topic
lors de la création du domaine doit être défini. L’attribut de mappage par défaut est source
.
Réception et consommation d’événements
Le service Event Grid ne stocke pas d’événements. Par conséquent, ce Kit de développement logiciel (SDK) Event Grid n’a pas de récepteur d’événements. Au lieu de cela, les événements sont stockés dans les gestionnaires d’événements, notamment ServiceBus, EventHubs, File d’attente de stockage, point de terminaison WebHook ou de nombreux autres services Azure pris en charge. Toutefois, actuellement, tous les événements sont envoyés et stockés sous forme de données JSON encodées. Voici un code de base qui détaille la désérialisation des événements une fois qu’ils ont été reçus par les gestionnaires d’événements. Là encore, la gestion est différente en fonction du schéma d’événement reçu de la rubrique/de l’abonnement.
Désérialiser EventGridEvent
ou CloudEvent
à partir d’une chaîne JSON
La chaîne JSON peut avoir un seul événement ou un tableau d’événements. Le résultat retourné est une liste d’événements.
// Deserialize an EventGridEvent
String eventGridEventJsonData = "<your EventGridEvent json String>";
List<EventGridEvent> eventGridEvents = EventGridEvent.fromString(eventGridEventJsonData);
// Deserialize a CloudEvent
String cloudEventJsonData = "<your CloudEvent json String>";
List<CloudEvent> cloudEvents = CloudEvent.fromString(cloudEventJsonData);
Désérialiser des données à partir d’un CloudEvent
ou EventGridEvent
Une fois que vous avez désérialisé ou EventGridEvent
CloudEvent
à partir d’une chaîne JSON, vous pouvez utiliser getData()
ou CloudEvent
EventGridEvent
pour obtenir la charge utile de l’événement. Il retourne un BinaryData
objet, qui a des méthodes pour désérialiser davantage les données en types utilisables :
BinaryData.toBytes()
obtient les données sous forme d’octet[]BinaryData.toString()
obtient les données sous forme de chaîneBinaryData.toObject()
obtient les données en tant qu’objet d’un type spécifique. Il utilise le désérialiseur Json par défaut. Il a une surcharge d’accepter votre désérialiseur si vous souhaitez utiliser le vôtre.
BinaryData eventData = eventGridEvent.getData();
//Deserialize data to a model class
User dataInModelClass = eventData.toObject(User.class);
//Deserialize data to a Map
Map<String, Object> dataMap = eventData.toObject(new TypeReference<Map<String, Object>>() {
});
//Deserialize Json String to a String
String dataString = eventData.toObject(String.class);
//Deserialize String data to a String
String dataInJsonString = eventData.toString();
//Deserialize data to byte array (byte[])
byte[] dataInBytes = eventData.toBytes();
Désérialiser les données d’événement système à partir de CloudEvent
ou EventGridEvent
Un événement envoyé à une rubrique système est appelé événement de rubrique système ou événement système.
Une rubrique système dans Event Grid représente les événements publiés par une source d’événements comme Stockage Azure, Azure Event Hubs, App Configuration, etc.
Par exemple, lorsqu’un objet blob est créé, un événement système avec le type d’événement « Microsoft.Storage.BlobCreated » est envoyé à la rubrique système configurée.
La classe d’événements système pour ce type d’événement est StorageBlobCreatedEventData
définie dans le package com.azure.messaging.eventgrid.systemevents
.
EventGrid a des événements système pour :
- Azure App Configuration
- Azure App Service
- Stockage Blob Azure
- ...
- Reportez-vous aux services Azure qui prennent en charge des rubriques système pour de nombreux autres services.
- Reportez-vous au package
com.azure.messaging.eventgrid.systemevents
pour les classes d’événements système associées
Vous ne pouvez pas envoyer un événement système à une rubrique système à l’aide de ce kit SDK.
La réception et la consommation d’événements système sont identiques à d’autres événements. En outre, un ensemble de classes de modèle pour les différentes données d’événement système sont définies dans le package com.azure.messaging.eventgrid.systemevents
. Vous pouvez effectuer les opérations suivantes après avoir désérialisé un événement à l’aide EventGridEvent.fromString()
de ou CloudEvent.fromString()
:
- recherchez la classe de modèle de données d’événement système dans laquelle les données d’événement système peuvent être désérialisées ;
// Look up the System Event data class
Class<?> eventDataClazz = SystemEventNames.getSystemEventMappings().get(event.getEventType());
- désérialiser les données d’un événement système dans une classe de modèle instance comme la désérialisation de toute autre donnée d’événement ;
// Deserialize the event data to an instance of a specific System Event data class type
BinaryData data = event.getData();
if (data != null) {
StorageBlobCreatedEventData blobCreatedData = data.toObject(StorageBlobCreatedEventData.class);
System.out.println(blobCreatedData.getUrl());
}
- gérer plusieurs types d’événements.
List<EventGridEvent> eventGridEvents = EventGridEvent.fromString("<Your EventGridEvent Json String>");
for (EventGridEvent eventGridEvent : eventGridEvents) {
BinaryData binaryData = eventGridEvent.getData();
switch (eventGridEvent.getEventType()) {
case SystemEventNames.APP_CONFIGURATION_KEY_VALUE_DELETED:
AppConfigurationKeyValueDeletedEventData keyValueDeletedEventData =
binaryData.toObject(TypeReference.createInstance(AppConfigurationKeyValueDeletedEventData.class));
System.out.println("Processing the AppConfigurationKeyValueDeletedEventData...");
System.out.printf("The key is: %s%n", keyValueDeletedEventData.getKey());
break;
case SystemEventNames.APP_CONFIGURATION_KEY_VALUE_MODIFIED:
AppConfigurationKeyValueModifiedEventData keyValueModifiedEventData =
binaryData.toObject(TypeReference.createInstance(AppConfigurationKeyValueModifiedEventData.class));
System.out.println("Processing the AppConfigurationKeyValueModifiedEventData...");
System.out.printf("The key is: %s%n", keyValueModifiedEventData.getKey());
break;
default:
System.out.printf("%s isn't an AppConfiguration event data%n", eventGridEvent.getEventType());
break;
}
}
Autres exemples
Vous trouverez des exemples de code supplémentaires ici.
Dépannage
Réponses et codes d’erreur
Les réponses de service sont retournées sous la forme de codes http status, y compris un certain nombre de codes d’erreur. Ces codes peuvent éventuellement être retournés par .PublisherClient
Des codes status inattendus sont levées pour HttpResponseException
encapsuler le code d’erreur.
La documentation de référence pour le service event grid est disponible ici. Il s’agit d’un bon point de départ pour les problèmes liés à la configuration des rubriques/points de terminaison, ainsi que pour les problèmes impliquant des codes d’erreur du service.
Suivi distribué
La bibliothèque Event Grid prend en charge la distribution du traçage prête à l’emploi. Pour se conformer aux directives de la spécification cloudEvents sur la distribution du suivi, la bibliothèque définit les attributs traceparent
et tracestate
sur extensionAttributes
d’un CloudEvent
lorsque le suivi distribué est activé. Pour en savoir plus sur l’activation du suivi distribué dans votre application, consultez la documentation consacrée au suivi distribué Java du kit de développement logiciel (SDK) Azure.
Aide et problèmes
La documentation de référence pour le Kit de développement logiciel (SDK) est disponible ici. Il s’agit d’une bonne première étape pour comprendre l’objectif de chaque méthode appelée, ainsi que les raisons possibles d’erreurs ou de comportement inattendu.
Si vous rencontrez des bogues avec ces SDK, veuillez déposer des problèmes via Problèmes ou vérifier StackOverflow pour le Kit de développement logiciel (SDK) Java Azure.
Étapes suivantes
- Kits de développement logiciel (SDK) Java Azure
- Si vous n’avez pas d’abonnement Microsoft Azure, vous pouvez obtenir un compte d’essai GRATUIT ici.
- Vous trouverez un exemple de code supplémentaire ici
- Vous trouverez d’autres tutoriels Event Grid ici
Contribution
Pour plus d’informations sur la contribution à ce dépôt, consultez le guide de contribution.
- Fork it
- Créer votre branche de fonctionnalité (
git checkout -b my-new-feature
) - Valider vos modifications (
git commit -am 'Add some feature'
) - Push vers la branche (
git push origin my-new-feature
) - Créer une demande de tirage
Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez les Questions fréquentes (FAQ) sur le code de conduite ou envoyez vos questions ou vos commentaires à opencode@microsoft.com.