Azure SignalR Hizmeti'nden Event Grid'e olayları gönderme

Azure Event Grid, pub-sub modeli kullanarak tekdüzen olay tüketimi sağlayan tam olarak yönetilen bir olay yönlendirme hizmetidir. Bu kılavuzda Azure CLI kullanarak bir Azure SignalR Hizmeti oluşturacak, bağlantı olaylarına abone olacak ve ardından olayları almak için örnek bir web uygulaması dağıtacaksınız. Son olarak, bağlanıp bağlantıyı kesebilir ve örnek uygulamada olay yükünü görebilirsiniz.

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Ön koşullar

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makaledeki Azure CLI komutları Bash kabuğu için biçimlendirilmiştir. PowerShell veya Komut İstemi gibi farklı bir kabuk kullanıyorsanız, satır devamı karakterlerini veya değişken atama satırlarını buna göre ayarlamanız gerekebilir. Bu makalede, gerekli komut düzenleme miktarını en aza indirmek için değişkenler kullanılır.

Kaynak grubu oluşturma

Azure kaynak grubu, Azure kaynaklarınızı dağıtıp yönettiğiniz mantıksal bir kapsayıcıdır. az group create komutu eastus bölgesinde myResourceGroupadlı bir kaynak grubu oluşturur. Kaynak grubunuz için farklı bir ad kullanmak istiyorsanız, farklı bir değere ayarlayın RESOURCE_GROUP_NAME .

RESOURCE_GROUP_NAME=myResourceGroup

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

SignalR Hizmeti oluşturma

Ardından, aşağıdaki komutlarla kaynak grubuna bir Azure Signals Hizmeti dağıtın.

SIGNALR_NAME=SignalRTestSvc

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

SignalR Hizmeti oluşturulduktan sonra, Azure CLI aşağıdaki örneğe benzer bir çıktı döndürür:

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

Olay uç noktası oluşturma

Bu bölümde, Azure Uygulaması Service'e önceden oluşturulmuş bir örnek web uygulaması dağıtmak için GitHub deposunda bulunan bir Resource Manager şablonu kullanacaksınız. Daha sonra kayıt defterinizin Event Grid olaylarına abone olur ve bu uygulamayı olayların gönderileceği uç nokta olarak belirtirsiniz.

Örnek uygulamayı dağıtmak için web uygulamanız için benzersiz bir ad ayarlayın SITE_NAME ve aşağıdaki komutları yürütür. Web uygulamasının tam etki alanı adının (FQDN) bir parçasını oluşturması nedeniyle site adı Azure'da benzersiz olmalıdır. Sonraki bir bölümde, kayıt defterinizin olaylarını görüntülemek için web tarayıcısında uygulamanın FQDN'sine gidersiniz.

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

Dağıtım başarılı olduktan sonra (birkaç dakika sürebilir), tarayıcınızı açın ve ardından web uygulamanıza giderek çalıştığından emin olun:

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

Event Grid kaynak sağlayıcısını etkinleştirme

  1. Daha önce Azure aboneliğinizde Event Grid kullanmadıysanız Event Grid kaynak sağlayıcısını kaydetmeniz gerekebilir. Sağlayıcıyı kaydetmek için şu komutu çalıştırın:

    az provider register --namespace Microsoft.EventGrid
    
  2. Kaydın tamamlanması biraz zaman alabilir. Durumu denetlemek için aşağıdaki komutu çalıştırın:

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

    registrationStateRegistered olduğu zaman devam edebilirsiniz.

Kayıt defteri olaylarına abone olma

Event Grid'de, hangi olayları izlemek istediğinizi ve bunları nereye gönderebileceğinizi bildirmek için bir konuya abone olursunuz. Komutaz eventgrid event-subscription create, oluşturduğunuz Azure SignalR Hizmeti abone olur ve web uygulamanızın URL'sini olayları göndermesi gereken uç nokta olarak belirtir. Önceki bölümlerde doldurdığınız ortam değişkenleri burada yeniden kullanılır, bu nedenle herhangi bir düzenleme gerekmez.

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

Abonelik tamamlandığında aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

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

Kayıt defteri olaylarını tetikleme

için hizmet moduna Serverless Mode geçin ve SignalR Hizmeti bir istemci bağlantısı ayarlayın. Sunucusuz Örnek'i başvuru olarak alabilirsiniz.

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

Kayıt defteri olaylarını görüntüleme

Şimdi bir istemciyi SignalR Hizmeti bağladınız. Event Grid Görüntüleyicisi web uygulamanıza gidin ve bir ClientConnectionConnected olay görmeniz gerekir. İstemciyi sonlandırdığınızda bir ClientConnectionDisconnected olay da görürsünüz.