Delen via


Gebeurtenissen van Azure SignalR Service naar Event Grid verzenden

Azure Event Grid is een volledig beheerde service voor gebeurtenisroutering die uniform gebeurtenisverbruik biedt met behulp van een pub-submodel. In deze handleiding gebruikt u de Azure CLI om een Azure SignalR-service te maken, u te abonneren op verbindingsgebeurtenissen en vervolgens een voorbeeldwebtoepassing te implementeren om de gebeurtenissen te ontvangen. Ten slotte kunt u verbinding maken en de verbinding verbreken en de nettolading van de gebeurtenis bekijken in de voorbeeldtoepassing.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

  • De Azure CLI-opdrachten in dit artikel zijn opgemaakt voor de Bash-shell . Als u een andere shell gebruikt, zoals PowerShell of opdrachtprompt, moet u mogelijk regelvervolgtekens of variabele toewijzingslijnen dienovereenkomstig aanpassen. In dit artikel worden variabelen gebruikt om de benodigde hoeveelheid bewerking van opdrachten te minimaliseren.

Belangrijk

Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden.

Een verbindingsreeks bevat de autorisatiegegevens die nodig zijn voor uw toepassing om toegang te krijgen tot Azure SignalR Service. De toegangssleutel in de verbindingsreeks is vergelijkbaar met een hoofdwachtwoord voor uw service. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbindingsreeks te beveiligen met behulp van Microsoft Entra-id en toegang te autoriseren met Microsoft Entra ID.

Vermijd het distribueren van toegangssleutels naar andere gebruikers, het coderen ervan of het opslaan van ze ergens in tekst zonder opmaak die toegankelijk is voor anderen. Draai uw sleutels als u denkt dat ze mogelijk zijn aangetast.

Een brongroep maken

Een Azure-resourcegroep is een logische container waarin u uw Azure-resources implementeert en beheert. Met de opdracht az group create maakt u een resourcegroep met de naam myResourceGroup in de regio Eastus . Als u een andere naam voor uw resourcegroep wilt gebruiken, stelt u deze in RESOURCE_GROUP_NAME op een andere waarde.

RESOURCE_GROUP_NAME=myResourceGroup

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

Een SignalR-service maken

Implementeer vervolgens een Azure Signals Service in de resourcegroep met de volgende opdrachten.

SIGNALR_NAME=SignalRTestSvc

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

Zodra de SignalR-service is gemaakt, retourneert de Azure CLI uitvoer die vergelijkbaar is met het volgende voorbeeld:

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

Een gebeurteniseindpunt maken

In deze sectie gebruikt u een Resource Manager-sjabloon in een GitHub-opslagplaats om een vooraf gemaakte voorbeeldwebtoepassing te implementeren in Azure-app Service. Later abonneert u zich op de Event Grid-gebeurtenissen van uw register en geeft u deze app op als het eindpunt waarnaar de gebeurtenissen worden verzonden.

Als u de voorbeeld-app wilt implementeren, stelt u SITE_NAME deze in op een unieke naam voor uw web-app en voert u de volgende opdrachten uit. De sitenaam moet uniek zijn binnen Azure omdat deze deel uitmaakt van de FQDN (Fully Qualified Domain Name) van de web-app. In een latere sectie gaat u naar de FQDN van de app in een webbrowser om de gebeurtenissen van uw register weer te geven.

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

Zodra de implementatie is voltooid (dit kan enkele minuten duren), opent u uw browser en gaat u naar uw web-app om te controleren of deze wordt uitgevoerd:

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

De Event Grid-resourceprovider inschakelen

  1. Als u Event Grid in uw Azure-abonnement nog niet eerder hebt gebruikt, moet u mogelijk de Event Grid-resourceprovider registreren. Voer de volgende opdracht uit om de provider te registreren:

    az provider register --namespace Microsoft.EventGrid
    
  2. Het kan even duren voordat de registratie is voltooid. Voer de volgende opdracht uit om de status te controleren:

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

    Wanneer registrationStateRegistered is, bent u klaar om door te gaan.

Abonneren op register gebeurtenissen

In Event Grid abonneert u zich op een onderwerp om aan te geven welke gebeurtenissen u wilt bijhouden en waar ze moeten worden verzonden. De opdracht az eventgrid event-subscription create abonneert zich op de Azure SignalR-service die u hebt gemaakt en geeft de URL van uw web-app op als het eindpunt waarnaar gebeurtenissen moeten worden verzonden. De omgevingsvariabelen die u in eerdere secties hebt ingevuld, worden hier opnieuw gebruikt, dus er zijn geen wijzigingen vereist.

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

Wanneer het abonnement is voltooid, ziet u uitvoer die vergelijkbaar is met het volgende voorbeeld:

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

Register gebeurtenissen activeren

Schakel over naar de servicemodus en Serverless Mode stel een clientverbinding in met de SignalR-service. U kunt een serverloos voorbeeld gebruiken als referentie.

Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbindingsreeks te beveiligen met behulp van Microsoft Entra-id en toegang te autoriseren met 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

Register gebeurtenissen weergeven

U hebt nu een client verbonden met de SignalR-service. Ga naar uw Event Grid Viewer-web-app en u ziet een ClientConnectionConnected gebeurtenis. Als u de client beëindigt, ziet u ook een ClientConnectionDisconnected gebeurtenis.