如何將事件從 Azure SignalR Service 傳送至事件方格
「Azure 事件方格」是一個完全受控的事件路由服務,可使用發佈-訂閱模型來提供統一的事件耗用。 在此指南中,您可以使用 Azure CLI 來建立 Azure SignalR Service、訂閱連線事件,然後部署範例 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 Service 之後,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 Service。 您稍後會訂閱登錄的事件方格事件,並指定此應用程式作為要將事件傳送至其中的端點。
若要部署範例應用程式,請將 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 訂用帳戶中從未使用過事件方格,可能必須註冊事件方格資源提供者。 執行下列命令以註冊提供者:
az provider register --namespace Microsoft.EventGrid
可能需要一點時間才能完成註冊。 若要檢查狀態,請執行下列命令:
az provider show --namespace Microsoft.EventGrid --query "registrationState"
當
registrationState
是Registered
時,代表已準備好繼續進行。
訂閱登錄事件
在事件方格中,您可以訂閱「主題」,以告知它您想要追蹤的事件,以及要將它們傳送至何處。 下列的 az eventgrid event-subscription create
命令會訂閱您所建立的 Azure SignalR Service,並指定您的 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 Service 的用戶端連線。 您可以採用無伺服器範例作為參考。
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 Service。 瀏覽至您的事件方格檢視器 Web 應用程式,而您應該會看到 ClientConnectionConnected
事件。 如果您終止該用戶端,您也會看到 ClientConnectionDisconnected
事件。