Jak wysyłać zdarzenia z usługi Azure SignalR Service do usługi Event Grid

Azure Event Grid to w pełni zarządzana usługa routingu zdarzeń, która zapewnia jednolite użycie zdarzeń przy użyciu modelu podrzędnego pub-sub. W tym przewodniku użyjesz interfejsu wiersza polecenia platformy Azure, aby utworzyć usługę Azure SignalR Service, zasubskrybować zdarzenia połączenia, a następnie wdrożyć przykładową aplikację internetową w celu odbierania zdarzeń. Na koniec możesz nawiązać połączenie i rozłączyć się i zobaczyć ładunek zdarzenia w przykładowej aplikacji.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

  • Polecenia interfejsu wiersza polecenia platformy Azure w tym artykule są formatowane dla powłoki Bash . Jeśli używasz innej powłoki, takiej jak program PowerShell lub wiersz polecenia, może być konieczne odpowiednie dostosowanie znaków kontynuacji wiersza lub wierszy przypisania zmiennych. W tym artykule użyto zmiennych, aby zminimalizować wymaganą ilość wymaganych edycji poleceń.

Tworzenie grupy zasobów

Grupa zasobów platformy Azure to logiczny kontener, w którym wdrażasz zasoby platformy Azure i zarządzasz nimi. Polecenie az group create tworzy grupę zasobów o nazwie myResourceGroup w regionie eastus . Jeśli chcesz użyć innej nazwy dla grupy zasobów, ustaw RESOURCE_GROUP_NAME inną wartość.

RESOURCE_GROUP_NAME=myResourceGroup

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

Tworzenie usługi SignalR Service

Następnie wdróż usługę Azure Signals Service w grupie zasobów przy użyciu następujących poleceń.

SIGNALR_NAME=SignalRTestSvc

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

Po utworzeniu usługi SignalR Service interfejs wiersza polecenia platformy Azure zwraca dane wyjściowe podobne do następującego przykładu:

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

Tworzenie punktu końcowego zdarzenia

W tej sekcji użyjesz szablonu usługi Resource Manager znajdującego się w repozytorium GitHub, aby wdrożyć wstępnie utworzoną przykładową aplikację internetową w celu aplikacja systemu Azure Service. Później subskrybujesz zdarzenia usługi Event Grid rejestru i określisz tę aplikację jako punkt końcowy, do którego są wysyłane zdarzenia.

Aby wdrożyć przykładową aplikację, ustaw SITE_NAME unikatową nazwę aplikacji internetowej i wykonaj następujące polecenia. Nazwa witryny musi być unikatowa na platformie Azure, ponieważ stanowi część w pełni kwalifikowanej nazwy domeny (FQDN) aplikacji internetowej. W późniejszej sekcji przejdź do nazwy FQDN aplikacji w przeglądarce internetowej, aby wyświetlić zdarzenia rejestru.

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

Po pomyślnym zakończeniu wdrażania (może to potrwać kilka minut), otwórz przeglądarkę, a następnie przejdź do aplikacji internetowej, aby upewnić się, że jest ona uruchomiona:

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

Włączanie dostawcy zasobów usługi Event Grid

  1. Jeśli usługa Event Grid nie była wcześniej używana w ramach subskrypcji platformy Azure, może być konieczne zarejestrowanie dostawcy zasobów usługi Event Grid. Uruchom następujące polecenie, aby zarejestrować dostawcę:

    az provider register --namespace Microsoft.EventGrid
    
  2. Ukończenie rejestracji może zająć trochę czasu. Aby sprawdzić stan, uruchom następujące polecenie:

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

    Gdy właściwość registrationState uzyska wartość Registered, można kontynuować.

Subskrybowanie zdarzeń rejestru

W usłudze Event Grid subskrybujesz temat , aby poinformować go o zdarzeniach, które chcesz śledzić i gdzie je wysłać. Polecenie az eventgrid event-subscription create subskrybuje utworzoną usługę Azure SignalR Service i określa adres URL aplikacji internetowej jako punkt końcowy, do którego ma wysyłać zdarzenia. Zmienne środowiskowe wypełnione we wcześniejszych sekcjach są ponownie używane w tym miejscu, więc nie są wymagane żadne zmiany.

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 zakończeniu subskrypcji powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

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

Wyzwalanie zdarzeń rejestru

Przejdź do trybu Serverless Mode usługi i skonfiguruj połączenie klienta z usługą SignalR Service. Przykład bezserwerowy można pobrać jako odwołanie.

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

Wyświetlanie zdarzeń rejestru

Teraz połączono klienta z usługą SignalR Service. Przejdź do aplikacji internetowej Podgląd usługi Event Grid i powinno zostać wyświetlone ClientConnectionConnected zdarzenie. Po zakończeniu działania klienta zobaczysz ClientConnectionDisconnected również zdarzenie.