Bagikan melalui


Cara mengirim peristiwa dari Azure SignalR Service ke Kotak Peristiwa

Azure Event Grid adalah layanan perutean peristiwa terkelola penuh yang menyediakan konsumsi peristiwa seragam menggunakan model pub-sub. Dalam panduan ini, Anda menggunakan Azure CLI untuk membuat Azure SignalR Service, berlangganan peristiwa koneksi, lalu menyebarkan sampel aplikasi web untuk menerima peristiwa. Terakhir, Anda dapat menghubungkan dan memutuskan sambungan dan melihat payload peristiwa di aplikasi sampel.

Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.

Prasyarat

  • Perintah Azure CLI dalam artikel ini diformat untuk shell Bash. Jika Anda menggunakan shell yang berbeda seperti PowerShell atau Command Prompt, Anda mungkin perlu menyesuaikan karakter kelanjutan baris atau baris penugasan variabel yang sesuai. Artikel ini menggunakan variabel untuk meminimalkan jumlah pengeditan perintah yang diperlukan.

Penting

String koneksi mentah muncul dalam artikel ini hanya untuk tujuan demonstrasi.

string koneksi menyertakan informasi otorisasi yang diperlukan aplikasi Anda untuk mengakses Azure SignalR Service. Kunci akses di dalam string koneksi mirip dengan kata sandi root untuk layanan Anda. Di lingkungan produksi, selalu lindungi kunci akses Anda. Gunakan Azure Key Vault untuk mengelola dan memutar kunci Anda dengan aman dan mengamankan string koneksi Anda menggunakan ID Microsoft Entra dan mengotorisasi akses dengan ID Microsoft Entra.

Hindari mendistribusikan kunci akses ke pengguna lain, melakukan hard-coding, atau menyimpannya di mana saja dalam teks biasa yang dapat diakses orang lain. Putar kunci Anda jika Anda yakin bahwa kunci tersebut mungkin telah disusupi.

Buat grup sumber daya

Grup sumber daya Azure adalah kontainer logis tempat Anda menyebarkan dan mengelola sumber daya Azure Anda. Perintah az group create membuat grup sumber daya bernama myResourceGroup di wilayah eastus . Jika Anda ingin menggunakan nama yang berbeda untuk grup sumber daya Anda, setel RESOURCE_GROUP_NAME ke nilai yang berbeda.

RESOURCE_GROUP_NAME=myResourceGroup

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

Membuat SignalR Service

Selanjutnya, sebarkan Azure Signals Service ke dalam grup sumber daya dengan perintah berikut.

SIGNALR_NAME=SignalRTestSvc

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

Setelah SignalR Service dibuat, Azure CLI mengembalikan output yang mirip dengan contoh berikut:

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

Membuat titik akhir peristiwa

Di bagian ini, Anda menggunakan templat Resource Manager yang terletak di repositori GitHub untuk menyebarkan aplikasi web sampel bawaan ke Azure App Service. Kemudian, Anda berlangganan peristiwa Event Grid registri Anda dan menentukan aplikasi ini sebagai titik akhir tempat peristiwa tersebut dikirim.

Untuk menyebarkan aplikasi sampel, atur SITE_NAME ke nama unik untuk aplikasi web Anda, dan jalankan perintah berikut. Nama situs harus unik dalam Azure karena membentuk sebagian dari nama domain yang sepenuhnya memenuhi syarat (FQDN) dari aplikasi web. Di bagian selanjutnya, Anda menavigasi ke FQDN aplikasi di browser web untuk melihat peristiwa registri Anda.

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

Setelah penyebaran berhasil (mungkin perlu beberapa menit), buka browser Anda, lalu buka aplikasi web Anda untuk memastikannya berjalan:

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

Aktifkan penyedia sumber daya Event Grid

  1. Jika ini pertama kalinya Anda menggunakan Event Grid di langganan Azure, Anda mungkin perlu mendaftarkan penyedia sumber daya Event Grid. Jalankan perintah berikut untuk mendaftarkan penyedia:

    az provider register --namespace Microsoft.EventGrid
    
  2. Mungkin perlu beberapa saat agar pendaftaran selesai. Untuk memeriksa status, jalankan perintah berikut:

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

    Saat registrationState adalah Registered, Anda siap untuk melanjutkan.

Berlangganan acara registri

Di Event Grid, Anda berlangganan topik untuk menentukan peristiwa yang ingin Anda lacak, dan tempat untuk mengirim peristiwa. Perintah az eventgrid event-subscription create berlangganan Azure SignalR Service yang Anda buat dan menentukan URL aplikasi web Anda sebagai titik akhir tempatnya harus mengirim peristiwa. Variabel lingkungan yang Anda isi di bagian sebelumnya digunakan kembali di sini, jadi tidak diperlukan pengeditan.

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

Saat langganan selesai, Anda akan melihat output yang mirip dengan contoh berikut:

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

Picu peristiwa registri

Beralih ke mode layanan ke Serverless Mode dan siapkan koneksi klien ke SignalR Service. Anda dapat mengambil Sampel Tanpa Server sebagai referensi.

String koneksi mentah muncul dalam artikel ini hanya untuk tujuan demonstrasi. Di lingkungan produksi, selalu lindungi kunci akses Anda. Gunakan Azure Key Vault untuk mengelola dan memutar kunci Anda dengan aman dan mengamankan string koneksi Anda menggunakan ID Microsoft Entra dan mengotorisasi akses dengan ID Microsoft Entra.

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 NegotiationServer
dotnet user-secrets set Azure:SignalR:ConnectionString "<Connection String>"
dotnet run

# Use a separate command line
# Start a client
cd SignalRClient
dotnet run

Lihat peristiwa registri

Anda sekarang telah menghubungkan klien ke SignalR Service. Buka aplikasi web Penampil Event Grid, dan Anda akan melihat peristiwa ClientConnectionConnected. Jika Anda mengakhiri klien, Anda juga akan melihat ClientConnectionDisconnected peristiwa.