Condividi tramite


Come inviare eventi dal Servizio Azure SignalR a Griglia di eventi

Griglia di eventi di Azure è un servizio di routing eventi completamente gestito che fornisce un utilizzo uniforme degli eventi tramite un modello pub-sub. In questa guida si usa l'interfaccia della riga di comando di Azure per creare un Servizio Azure SignalR, sottoscrivere gli eventi di connessione e quindi distribuire un'applicazione Web di esempio per ricevere gli eventi. Infine, è possibile connettersi e disconnettere e visualizzare il payload dell'evento nell'applicazione di esempio.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

  • I comandi dell'interfaccia della riga di comando di Azure in questo articolo sono formattati per la shell Bash. Se si usa una shell diversa, ad esempio PowerShell o il prompt dei comandi, può essere necessario modificare di conseguenza i caratteri di continuazione di riga o le righe di assegnazione di variabile. Questo articolo usa le variabili per ridurre al minimo la quantità di modifiche necessarie per i comandi.

Creare un gruppo di risorse

Un gruppo di risorse di Azure è un contenitore logico in cui vengono distribuite e gestite le risorse di Azure. Il comando az group create crea un gruppo di risorse denominato myResourceGroup nell'area eastus . Se si vuole usare un altro nome per il gruppo di risorse, impostare RESOURCE_GROUP_NAME su un valore diverso.

RESOURCE_GROUP_NAME=myResourceGroup

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

Servizio Azure SignalR

Distribuire quindi un servizio Segnali di Azure nel gruppo di risorse con i comandi seguenti.

SIGNALR_NAME=SignalRTestSvc

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

Dopo aver creato il Servizio SignalR, l'interfaccia della riga di comando di Azure restituisce un output simile all'esempio seguente:

{
  "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"
}

Creare un endpoint per gli eventi

In questa sezione si usa un modello di Resource Manager che si trova in un repository GitHub per distribuire un'applicazione Web di esempio predefinita nel servizio app Azure. Successivamente, si sottoscrivono gli eventi di Griglia di eventi del registro e si specifica l'app come endpoint a cui vengono inviati gli eventi.

Per distribuire l'app di esempio, impostare SITE_NAME su un nome univoco per l'app Web ed eseguire i comandi seguenti. Il nome del sito deve essere univoco all'interno di Azure perché fa parte del nome di dominio completo (FQDN) dell'app Web. In una sezione successiva, si passa al nome di dominio completo dell'app in un Web browser per visualizzare gli eventi del registro.

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

Al termine della distribuzione (potrebbero essere necessari alcuni minuti), aprire il browser e quindi passare all'app Web per assicurarsi che sia in esecuzione:

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

Abilitare il provider di risorse di Griglia di eventi

  1. Se Griglia di eventi non è stato usato in precedenza nella sottoscrizione di Azure, potrebbe essere necessario registrare il provider di risorse di Griglia di eventi. Eseguire il comando seguente per registrare il provider:

    az provider register --namespace Microsoft.EventGrid
    
  2. La registrazione può richiedere qualche secondo. Per controllare lo stato, eseguire il comando seguente:

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

    Quando registrationState è Registered, è possibile continuare.

Sottoscrivere gli eventi del registro

In Griglia di eventi si sottoscrive un argomento per indicare gli eventi di cui si vuole tenere traccia e la destinazione a cui inviarli. Il comando az eventgrid event-subscription create sottoscrive il Servizio Azure SignalR creato e specifica l'URL dell'app Web come endpoint a cui deve inviare gli eventi. In questo caso vengono riutilizzate le variabili di ambiente popolate nelle sezioni precedenti. Non è quindi necessaria alcuna modifica.

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

Al termine della sottoscrizione, verrà visualizzato un output simile all'esempio seguente:

{
  "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"
}

Attivare gli eventi del registro

Passare alla modalità servizio a Serverless Mode e configurare una connessione client al Servizio SignalR. È possibile accettare l'esempio serverless come riferimento.

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

Visualizzare gli eventi del registro

A questo punto è stato connesso un client al Servizio SignalR. Passare all'app Web Visualizzatore Griglia di eventi e dovrebbe essere visualizzato un ClientConnectionConnected evento. Se si termina il client, verrà visualizzato anche un ClientConnectionDisconnected evento.