Share via


Cómo enviar eventos de Azure SignalR Service a Event Grid

Azure Event Grid es un servicio de enrutamiento de eventos completamente administrado que ofrece un consumo de eventos uniforme mediante un modelo de publicación-suscripción. En esta guía, usará la CLI de Azure para crear una instancia de Azure SignalR Service, suscribirse a eventos de conexión e implementar una aplicación web de ejemplo para recibir los eventos. Por último, puede conectar y desconectar y ver la carga del evento en la aplicación de ejemplo.

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Requisitos previos

  • Los comandos de la CLI de Azure que aparecen en este artículo tienen un formato para la shell de Bash. Si usa un shell diferente, como PowerShell o el símbolo del sistema, puede que tenga que ajustar los caracteres de continuación de línea o las líneas de asignación de variable según corresponda. En este artículo se usan variables para minimizar la edición de comandos necesaria.

Crear un grupo de recursos

Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure. El comando az group create crea un grupo de recursos denominado myResourceGroup en la región eastus. Si desea usar otro nombre para el grupo de recursos, establezca RESOURCE_GROUP_NAME en otro valor.

RESOURCE_GROUP_NAME=myResourceGroup

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

Creación de una instancia de SignalR Service

A continuación, implemente una instancia de Azure Signals Service en el grupo de recursos con los siguientes comandos.

SIGNALR_NAME=SignalRTestSvc

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

Una vez creada la instancia, la CLI de Azure devuelve una salida similar a la del siguiente ejemplo:

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

Creación de un punto de conexión de evento

En esta sección, se usará una plantilla de Resource Manager ubicada en un repositorio de GitHub para implementar una aplicación web precompilada de ejemplo en Azure App Service. Posteriormente, se suscribirá a los eventos de Event Grid del registro y especificará esta aplicación como punto de conexión al que se enviarán los eventos.

Para implementar la aplicación de ejemplo, establezca SITE_NAME en un nombre único para la aplicación web y ejecute los comandos siguientes. El nombre del sitio debe ser único dentro de Azure porque forma parte del nombre de dominio completo (FQDN) de la aplicación web. En una sección posterior, navegará al FQDN de la aplicación en un explorador web para ver los eventos 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

Una vez que haya realizado correctamente la implementación (podría tardar unos minutos), abra un explorador y vaya a la aplicación web para asegurarse de que se está ejecutando:

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

Habilitar el proveedor de recursos de Event Grid

  1. Si aún no ha usado anteriormente Event Grid en su suscripción de Azure, puede que tenga que registrar el proveedor de recursos de Event Grid. Ejecute el siguiente comando para registrar el proveedor:

    az provider register --namespace Microsoft.EventGrid
    
  2. El registro puede tardar unos instantes en finalizar. Para comprobar el estado, ejecute el comando siguiente:

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

    Cuando registrationState sea Registered, estará preparado para continuar.

Suscripción a eventos del registro

En Event Grid, suscríbase a un tema para indicarle a qué eventos desea realizar un seguimiento y adónde enviarlos. El comando az eventgrid event-subscription create se suscribe a Azure SignalR Service que creó y especifica la dirección URL de la aplicación web como el punto de conexión al que debe enviar eventos. Las variables de entorno que rellenó en las secciones anteriores se reutilizan aquí, por lo que no se requiere ninguna modificación.

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

Una vez completada la suscripción, debería ver una salida similar a la del siguiente ejemplo:

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

Desencadenamiento de eventos del registro

Cambie al modo de servicio en Serverless Mode y configure una conexión de cliente a SignalR Service. Puede seguir este ejemplo sin servidor como referencia.

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

Visualización de eventos del registro

Ahora se ha conectado un cliente a SignalR Service. Vaya a la aplicación web de Visor de Event Grid, debería ver un evento ClientConnectionConnected. Si termina el cliente, también verá un evento ClientConnectionDisconnected.