Partager via


Guide pratique pour envoyer des événements d’Azure SignalR Service à Event Grid

Azure Event Grid est un service de routage d’événements entièrement géré qui permet une consommation d’événements uniforme avec un modèle publication-abonnement. Dans ce guide, vous utilisez l’interface Azure CLI pour créer un Azure SignalR Service, vous abonner aux événements de connexion, puis déployer un exemple d’application web pour recevoir les événements. Enfin, vous pouvez vous connecter et déconnecter et voir la charge utile d’événement dans l’exemple d’application.

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

Prérequis

  • Les commandes CLI de cet article sont mises en forme pour le shell Bash. Si vous utilisez un autre shell, comme PowerShell ou l’invite de commandes, il peut être nécessaire d’ajuster en conséquence les caractères de continuation de ligne ou les lignes d’affectation des variables. Cet article utilise des variables pour réduire le nombre de modifications nécessaires des commandes.

Créer un groupe de ressources

Un groupe de ressources Azure est un conteneur logique dans lequel vous déployez et vous gérez vos ressources Azure. La commande az group create crée un groupe de ressources nommé myResourceGroup dans la région eastus. Si vous voulez utiliser un autre nom pour votre groupe de ressources, définissez RESOURCE_GROUP_NAME sur une autre valeur.

RESOURCE_GROUP_NAME=myResourceGroup

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

Créer une ressource SignalR Service

Ensuite, déployez une ressource Azure SignalR Service dans le groupe de ressources avec les commandes suivantes.

SIGNALR_NAME=SignalRTestSvc

az signalr create --resource-group $RESOURCE_GROUP_NAME --name $SIGNALR_NAME --sku Free_F1

Une fois la ressource SignalR Service créée, Azure CLI renvoie une sortie semblable à l’exemple suivant :

{
  "externalIp": "13.76.156.152",
  "hostName": "clitest.servicedev.signalr.net",
  "hostNamePrefix": "clitest",
  "id": "/subscriptions/28cf13e2-c598-4aa9-b8c8-098441f0827a/resourceGroups/clitest1/providers/Microsoft.SignalRService/SignalR/clitest",
  "location": "southeastasia",
  "name": "clitest",
  "provisioningState": "Succeeded",
  "publicPort": 443,
  "resourceGroup": "clitest1",
  "serverPort": 443,
  "sku": {
    "capacity": 1,
    "family": null,
    "name": "Free_F1",
    "size": "F1",
    "tier": "Free"
  },
  "tags": null,
  "type": "Microsoft.SignalRService/SignalR",
  "version": "1.0"
}

Créer un point de terminaison d’événements

Dans cette section, vous utilisez un modèle Resource Manager qui se trouve dans un référentiel GitHub pour déployer un exemple d’application web prédéfinie sur Azure App Service. Plus tard, vous vous abonnez aux événements Event Grid de votre registre et vous spécifiez cette application comme point de terminaison auquel les événements sont envoyés.

Pour déployer l’exemple d’application, définissez SITE_NAME avec un nom unique pour votre application web et exécutez les commandes suivantes. Le nom du site doit être unique au sein d’Azure, car il fait partie du nom de domaine complet (FQDN) de l’application web. Dans une section ultérieure, vous accédez au nom de domaine complet de l’application dans un navigateur web pour visualiser les événements de votre registre.

SITE_NAME=<your-site-name>

az deployment group create \
    --resource-group $RESOURCE_GROUP_NAME \
    --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
    --parameters siteName=$SITE_NAME hostingPlanName=$SITE_NAME-plan

Une fois le déploiement réussi (celui-ci peut prendre quelques minutes), ouvrez votre navigateur, puis accédez à votre application web pour vérifier qu’elle fonctionne :

http://<your-site-name>.azurewebsites.net

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.

S’abonner aux événements du registre

Dans Event Grid, vous vous abonnez à un sujet pour lui indiquer les événements qui vous intéressent, et où les envoyer. La commande az eventgrid event-subscription create s’abonne au service Azure SignalR que vous avez créé et spécifie l’URL de votre application web comme point de terminaison auquel il doit envoyer des événements. Les variables d’environnement que vous avez renseignées dans les sections précédentes sont réutilisées ici : aucune modification n’est donc nécessaire.

SIGNALR_SERVICE_ID=$(az signalr show --resource-group $RESOURCE_GROUP_NAME --name $SIGNALR_NAME --query id --output tsv)
APP_ENDPOINT=https://$SITE_NAME.azurewebsites.net/api/updates

az eventgrid event-subscription create \
    --name event-sub-signalr \
    --source-resource-id $SIGNALR_SERVICE_ID \
    --endpoint $APP_ENDPOINT

Une fois l’abonnement souscrit, vous obtenez normalement un résultat semblable à l’exemple suivant :

{
  "deadLetterDestination": null,
  "destination": {
    "endpointBaseUrl": "https://$SITE_NAME.azurewebsites.net/api/updates",
    "endpointType": "WebHook",
    "endpointUrl": null
  },
  "filter": {
    "includedEventTypes": [
      "Microsoft.SignalRService.ClientConnectionConnected",
      "Microsoft.SignalRService.ClientConnectionDisconnected"
    ],
    "isSubjectCaseSensitive": null,
    "subjectBeginsWith": "",
    "subjectEndsWith": ""
  },
  "id": "/subscriptions/28cf13e2-c598-4aa9-b8c8-098441f0827a/resourceGroups/myResourceGroup/providers/Microsoft.SignalRService/SignalR/SignalRTestSvc/providers/Microsoft.EventGrid/eventSubscriptions/event-sub-signalr",
  "labels": null,
  "name": "event-sub-signalr",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "retryPolicy": {
    "eventTimeToLiveInMinutes": 1440,
    "maxDeliveryAttempts": 30
  },
  "topic": "/subscriptions/28cf13e2-c598-4aa9-b8c8-098441f0827a/resourceGroups/myResourceGroup/providers/microsoft.signalrservice/signalr/SignalRTestSvc",
  "type": "Microsoft.EventGrid/eventSubscriptions"
}

Déclencher des événements du registre

Passez le mode de service en mode Serverless Mode et établissez une connexion client à la ressource SignalR Service. Vous pouvez prendre l’exemple sans serveur comme référence.

git clone git@github.com:aspnet/AzureSignalR-samples.git

cd samples/Management

# Start the negotiation server
# Negotiation server is responsible for generating access token for clients
cd NegotitationServer
dotnet user-secrets set Azure:SignalR:ConnectionString "<Connection String>"
dotnet run

# Use a separate command line
# Start a client
cd SignalRClient
dotnet run

Afficher des événements du registre

Vous avez maintenant connecté un client à la ressource SignalR Service. Accédez à votre application web de visionneuse Event Grid : vous devriez voir un événement ClientConnectionConnected. Si vous arrêtez le client, vous verrez également un événement ClientConnectionDisconnected.