Compartir a través de


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.

Importante

Las cadenas de conexión sin procesar solo aparecen en este artículo con fines de demostración.

Una cadena de conexión incluye la información de autorización necesaria para que la aplicación acceda al servicio Azure Web PubSub. La clave de acceso dentro de la cadena de conexión es similar a una contraseña raíz para el servicio. En entornos de producción, proteja siempre las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura y proteger la cadena de conexión mediante Microsoft Entra ID y Autorizar el acceso con Microsoft Entra ID.

Evite distribuirlas a otros usuarios, codificarlas de forma rígida o guardarlas en un archivo de texto sin formato al que puedan acceder otros usuarios. Rote sus claves si cree que se han puesto en peligro.

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 la instancia de Azure SignalR Service que creó y especifica la dirección URL de la aplicación web como punto de conexión al que deben enviarse los 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.

Las cadenas de conexión sin procesar solo aparecen en este artículo con fines de demostración. En entornos de producción, proteja siempre las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura y proteger la cadena de conexión mediante Microsoft Entra ID y Autorizar el acceso con Microsoft Entra ID.

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 NegotiationServer
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.