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
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- 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
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
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
seaRegistered
, 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
.