Odesílání událostí ze služby Azure SignalR Service do služby Event Grid

Azure Event Grid je plně spravovaná služba směrování událostí, která poskytuje jednotné využití událostí pomocí modelu pub-sub. V této příručce pomocí Azure CLI vytvoříte službu Azure SignalR, přihlásíte se k odběru událostí připojení a pak nasadíte ukázkovou webovou aplikaci pro příjem událostí. Nakonec se můžete připojit a odpojit a zobrazit datovou část události v ukázkové aplikaci.

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Předpoklady

  • Příkazy Azure CLI v tomto článku jsou formátované pro prostředí Bash . Pokud používáte jiné prostředí, jako je PowerShell nebo příkazový řádek, budete možná muset odpovídajícím způsobem upravit znaky pokračování řádku nebo řádky přiřazení proměnných. Tento článek používá proměnné k minimalizaci požadovaného množství úprav příkazů.

Vytvoření skupiny zdrojů

Skupina prostředků Azure je logický kontejner, ve kterém nasazujete a spravujete prostředky Azure. Příkaz az group create vytvoří skupinu prostředků myResourceGroup v oblasti eastus. Pokud chcete pro skupinu prostředků použít jiný název, nastavte RESOURCE_GROUP_NAME na jinou hodnotu.

RESOURCE_GROUP_NAME=myResourceGroup

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

Vytvoření služby SignalR

V dalším kroku nasaďte službu Azure Signal Service do skupiny prostředků pomocí následujících příkazů.

SIGNALR_NAME=SignalRTestSvc

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

Po vytvoření služby SignalR vrátí Azure CLI výstup podobný následujícímu příkladu:

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

Vytvoření koncového bodu události

V této části použijete šablonu Resource Manageru umístěnou v úložišti GitHub k nasazení předem připravené ukázkové webové aplikace do služby Aplikace Azure Service. Později se přihlásíte k odběru událostí služby Event Grid vašeho registru a určíte tuto aplikaci jako koncový bod, do kterého se události odesílají.

Pokud chcete nasadit ukázkovou aplikaci, nastavte SITE_NAME pro webovou aplikaci jedinečný název a spusťte následující příkazy. Název webu musí být v rámci Azure jedinečný, protože je součástí plně kvalifikovaného názvu domény (FQDN) webové aplikace. V další části přejdete do plně kvalifikovaného názvu domény aplikace ve webovém prohlížeči a zobrazíte události registru.

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

Jakmile bude nasazení úspěšné (může to trvat několik minut), otevřete prohlížeč a pak přejděte do webové aplikace, abyste měli jistotu, že je spuštěná:

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

Povolení poskytovatele prostředků Event Gridu

  1. Pokud jste službu Event Grid ve svém předplatném Azure ještě nepoužívali, možná budete muset zaregistrovat poskytovatele prostředků Event Gridu. Spuštěním následujícího příkazu zaregistrujte poskytovatele:

    az provider register --namespace Microsoft.EventGrid
    
  2. Dokončení registrace může chvíli trvat. Pokud chcete zkontrolovat stav, spusťte následující příkaz:

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

    Jakmile registrationState je Registered, můžete pokračovat.

Přihlášení k odběru událostí registru

Ve službě Event Grid se přihlásíte k odběru tématu , abyste mu řekli, které události chcete sledovat a kam je chcete odeslat. Příkaz az eventgrid event-subscription create se přihlásí ke službě Azure SignalR, kterou jste vytvořili, a jako koncový bod, do kterého má odesílat události, určuje adresu URL vaší webové aplikace. Tady se znovu používají proměnné prostředí, které jste naplnili v předchozích částech, takže nejsou potřeba žádné úpravy.

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

Po dokončení předplatného by se měl zobrazit výstup podobný následujícímu příkladu:

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

Aktivace událostí registru

Přepněte do režimu Serverless Mode služby a nastavte připojení klienta ke službě SignalR. Jako referenci můžete použít bezserverovou ukázku .

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

Zobrazení událostí registru

Právě jste připojili klienta ke službě SignalR. Přejděte do webové aplikace Event Grid Viewer a měla by se ClientConnectionConnected zobrazit událost. Pokud klienta ukončíte, zobrazí ClientConnectionDisconnected se také událost.