如何將事件從 Azure SignalR Service 傳送至事件方格
Azure 事件方格是完全受控的事件路由服務,可使用 pub-sub 模型提供統一的事件耗用量。 在本指南中,您會使用 Azure CLI 來建立 Azure SignalR 服務、訂閱線上活動,然後部署範例 Web 應用程式以接收事件。 最後,您可以連線和中斷連線,並在範例應用程式中查看事件承載。
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文中的 Azure CLI 命令會針對 Bash 殼層格式化。 如果您使用不同的殼層,例如 PowerShell 或命令提示字元,您可能需要據以調整行接續字元或變數指派行。 本文使用變數將所需的命令編輯量降到最低。
建立資源群組
Azure 資源群組是您部署和管理 Azure 資源的邏輯容器。 az group create 命令 會在 eastus 區域中建立名為 myResourceGroup 的資源群組。 如果您想要為資源群組使用不同的名稱,請將 設定 RESOURCE_GROUP_NAME
為不同的值。
RESOURCE_GROUP_NAME=myResourceGroup
az group create --name $RESOURCE_GROUP_NAME --location eastus
建立 SignalR 服務
接下來,使用下列命令,將 Azure Signals Service 部署至資源群組。
SIGNALR_NAME=SignalRTestSvc
az signalr create --resource-group $RESOURCE_GROUP_NAME --name $SIGNALR_NAME --sku Free_F1
建立 SignalR 服務之後,Azure CLI 會傳回類似下列範例的輸出:
{
"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"
}
建立事件端點
在本節中,您會使用位於 GitHub 存放庫中的 Resource Manager 範本,將預先建置的範例 Web 應用程式部署至Azure App 服務。 稍後,您會訂閱登錄的事件方格事件,並將此應用程式指定為傳送事件的端點。
若要部署範例應用程式,請將 設定 SITE_NAME
為 Web 應用程式的唯一名稱,然後執行下列命令。 網站名稱在 Azure 內必須是唯一的,因為它會形成 Web 應用程式的完整功能變數名稱 (FQDN) 的一部分。 在稍後的章節中,您會在網頁瀏覽器中流覽至應用程式的 FQDN,以檢視登錄的事件。
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
一旦部署成功(可能需要幾分鐘的時間),請開啟瀏覽器,然後移至您的 Web 應用程式,以確定它正在執行:
http://<your-site-name>.azurewebsites.net
啟用事件方格資源提供者
如果您先前尚未在 Azure 訂用帳戶中使用 Event Grid,您可能需要註冊 Event Grid 資源提供者。 執行下列命令來註冊提供者:
az provider register --namespace Microsoft.EventGrid
註冊可能需要一些時間才能完成。 若要檢查狀態,請執行下列命令:
az provider show --namespace Microsoft.EventGrid --query "registrationState"
當 是
Registered
時registrationState
,您已準備好繼續。
訂閱登錄事件
在事件方格中 ,您會訂閱主題 ,告知其要追蹤的事件,以及傳送事件的位置。 命令 az eventgrid event-subscription create
會訂閱您所建立的 Azure SignalR 服務,並將 Web 應用程式的 URL 指定為應該傳送事件的端點。 您在先前各節中填入的環境變數會在這裡重複使用,因此不需要編輯。
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
當訂用帳戶完成時,您應該會看到類似下列範例的輸出:
{
"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"
}
觸發登錄事件
切換至服務模式, Serverless Mode
並設定與 SignalR 服務的用戶端連線。 您可以採用 無伺服器範例 作為參考。
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
檢視登錄事件
您現在已將用戶端連線至 SignalR 服務。 流覽至您的事件方格檢視器 Web 應用程式,您應該會看到 ClientConnectionConnected
事件。 如果您終止用戶端,您也會看到 ClientConnectionDisconnected
事件。