’Publier dans des rubriques d’espace de noms et consommer des événements dans Azure Event Grid

Cet article fournit une présentation rapide de la livraison par extraction à l’aide de l’interpréteur de commandes en un coup curl pour publier, recevoir et accuser réception des événements. Les ressources Event Grid sont créées à l’aide de commandes CLI. Cet article est adapté à un test rapide de la fonctionnalité de livraison par extraction. Pour obtenir un exemple de code utilisant les kits de développement logiciel (SDK) de plan de données, consultez les exemples .NET ou Java. Pour Java, nous fournissons l’exemple de code dans deux articles : démarrages rapides de publier des événements et de recevoir des événements. Pour plus d’informations sur le modèle de livraison par extraction, consultez les articles sur les concepts et sur la vue d’ensemble de la livraison par extraction.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Prérequis

  • Cet article nécessite la version 2.0.70 ou ultérieure d’Azure CLI. Si vous utilisez Azure Cloud Shell, la version la plus récente est déjà installée.

Créer un groupe de ressources

Créez un groupe de ressources Azure avec la commande az group create. Nous utilisons ce groupe de ressources pour contenir toutes les ressources créées dans cet article.

Les étapes générales à suivre pour utiliser Cloud Shell pour exécuter des commandes sont les suivantes :

  • Cliquez sur Ouvrir Cloud Shell pour afficher une fenêtre Azure Cloud Shell dans le volet droit.
  • Copiez et collez la commande dans la fenêtre Cloud Shell.
  • Appuyez sur Entrée pour exécuter la commande.
  1. Déclarez une variable pour contenir le nom d'un groupe de ressources Azure. Spécifiez un nom pour le groupe de ressources en le remplaçant <your-resource-group-name> par une valeur de votre choix.

    resource_group="<your-resource-group-name>"
    
  2. Créez un groupe de ressources. Modifiez l’emplacement comme vous le souhaitez.

    az group create --name $resource_group --location eastus
    

Activer le fournisseur de ressources Event Grid

  1. Si vous n’avez jamais utilisé Event Grid dans votre abonnement Azure, vous risquez de devoir inscrire le fournisseur de ressources Event Grid. Exécutez la commande suivante pour enregistrer le fournisseur :

    az provider register --namespace Microsoft.EventGrid
    
  2. L’inscription peut prendre un certain temps. Pour vérifier l'état, exécutez la commande suivante :

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Lorsque registrationState est Registered, vous êtes prêt à continuer.

Créer un espace de noms

Un espace de noms Event Grid fournit un point de terminaison défini par l’utilisateur sur lequel vous publiez vos événements. L’exemple suivant crée un espace de noms dans votre groupe de ressources à l’aide de Bash dans Azure Cloud Shell. Le nom de l’espace de noms doit être unique, car il fait partie d’une entrée DNS. Un nom d’espace de noms doit respecter les règles suivantes :

  • Il doit contenir entre 3 et 50 caractères.
  • Il doit être unique au niveau régional.
  • Seuls les caractères autorisés sont a-z, A-Z, 0-9 et -
  • Il ne doit pas commencer par des préfixes de mots clés réservés comme Microsoft, System ou EventGrid.
  1. Déclarez une variable pour contenir le nom de votre espace de noms Event Grid. Spécifiez un nom pour l'espace de noms en le remplaçant <your-namespace-name> par une valeur que vous aimez.

    namespace="<your-namespace-name>"
    
  2. Créez un espace de noms. Vous souhaiterez peut-être modifier l’emplacement où il est déployé.

    az eventgrid namespace create -g $resource_group -n $namespace -l eastus
    

Créez une rubrique d’espace de noms

Créez une rubrique utilisée pour contenir tous les événements publiés sur le point de terminaison de l'espace de noms.

  1. Déclarez une variable pour contenir le nom de votre sujet d'espace de noms. Spécifiez un nom pour le sujet de l'espace de noms en le remplaçant <your-topic-name> par une valeur que vous aimez.

    topic="<your-topic-name>"
    
  2. Créez votre rubrique d’espace de noms :

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

Créer un abonnement d’événement

Créez un abonnement aux événements en définissant son mode de remise sur file d’attente, ce qui prend en charge la transmission de type pull. Pour plus d’informations sur toutes les options de configuration, reportez-vous à la dernière API REST du plan de contrôle Event Grid.

  1. Déclarez une variable pour contenir le nom d'un abonnement à un événement dans votre sujet d'espace de noms. Spécifiez un nom pour l'abonnement à l'événement en le remplaçant <your-event-subscription-name> par une valeur de votre choix.

    event_subscription="<your-event-subscription-name>"
    
  2. Créez un abonnement à l'événement pour le sujet de l'espace de noms :

    az eventgrid namespace topic event-subscription create -g $resource_group --topic-name $topic -n $event_subscription --namespace-name $namespace --delivery-configuration "{deliveryMode:Queue,queue:{receiveLockDurationInSeconds:300,maxDeliveryCount:4,eventTimeToLive:P1D}}"
    

Envoyer des événements à la rubrique

Maintenant, envoyez un exemple d'événement au sujet de l'espace de noms en suivant les étapes de cette section.

Répertorier les clés d’accès à l’espace de noms

  1. Obtenez les clés d'accès associées à l'espace de noms que vous avez créé. Vous utilisez l’une d’entre elles pour vous authentifier lors de la publication d’événements. Pour répertorier vos clés, vous avez d'abord besoin de l'ID de ressource d'espace de noms complet. Obtenez-le en exécutant la commande suivante :

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. Obtenez la première clé de l’espace de noms :

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

Publier un événement

  1. Récupérez le nom d’hôte de l’espace de noms. Vous l’utilisez pour composer le point de terminaison HTTP de l’espace de noms auquel les événements sont envoyés. Les opérations suivantes ont d’abord été disponibles dans la version 2023-06-01-preview de l’API.

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. Créez un exemple d'événement conforme à CloudEvents :

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    L’élément data est la charge utile de votre événement. N’importe quel fichier JSON bien construit peut être placé dans ce champ. Consultez les spécifications CloudEvents pour plus d’informations sur les propriétés (également appelées attributs de contexte) qui peuvent être activées dans un événement.

  3. Utilisez CURL pour envoyer l'événement au sujet. CURL est un utilitaire qui envoie des requêtes HTTP.

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

Recevez l'événement

Vous recevez des événements d’Event Grid à l’aide d’un point de terminaison qui fait référence à un abonnement aux événements.

  1. Composez ce point de terminaison en exécutant la commande suivante :

    receive_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:receive?api-version=2023-06-01-preview
    
  2. Envoyez une demande pour consommer l’événement :

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" $receive_operation_uri
    

Reconnaître un événement

Après avoir reçu un événement, vous transmettez cet événement à votre application pour traitement. Une fois que vous avez correctement traité votre événement, vous n’avez plus besoin que cet événement se trouve dans votre abonnement aux événements. Pour demander à Event Grid de supprimer l’événement, vous le reconnaissez en utilisant son jeton de verrou que vous avez obtenu sur la réponse de l’opération de réception.

  1. À l’étape précédente, vous devez avoir reçu une réponse qui inclut un objet brokerProperties avec une propriété lockToken. Copiez la valeur du jeton de verrou et définissez-la sur une variable d’environnement :

    lockToken="<paste-the-lock-token-here>"
    
  2. À présent, générez la charge utile de l’opération de reconnaissance, qui spécifie le jeton de verrou pour l’événement que vous souhaitez reconnaître.

    acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
    
  3. Poursuivez la génération de la chaîne avec l’URI de l’opération de reconnaissance :

    acknowledge_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:acknowledge?api-version=2023-06-01-preview
    
  4. Enfin, envoyez une demande pour reconnaître l’événement :

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" -d "$acknowledge_request_payload" $acknowledge_operation_uri
    

    Si l’opération d’acquittement est exécutée avant l’expiration du jeton de verrouillage (300 secondes définies lors de la création de l’abonnement aux événements), vous devriez voir une réponse semblable à la suivante :

    {"succeededLockTokens":["CiYKJDQ4NjY5MDEyLTk1OTAtNDdENS1BODdCLUYyMDczNTYxNjcyMxISChDZae43pMpE8J8ovYMSQBZS"],"failedLockTokens":[]}
    

Étapes suivantes

Pour en savoir plus sur le modèle de livraison pull, voir Vue d'ensemble de la livraison pull.