Ringkasan integrasi Azure Service Bus to Event Grid

Azure Service Bus dapat memancarkan peristiwa ke Event Grid saat ada pesan dalam antrean atau langganan saat tidak ada penerima. Anda dapat membuat langganan Event Grid ke namespace Service Bus Anda, mendengarkan peristiwa ini, lalu bereaksi terhadap peristiwa dengan memulai penerima. Dengan fitur ini, Anda dapat menggunakan Service Bus dalam model pemrograman reaktif. Skenario utama dari fitur ini adalah bahwa antrean atau langganan Service Bus dengan volume pesan yang rendah tidak perlu memiliki penerima yang melakukan jajak pendapat untuk pesan secara terus menerus.

Untuk mengaktifkan fitur ini, Anda memerlukan item berikut:

  • Namespace Service Bus Premium dengan setidaknya satu antrean Service Bus atau topik Service Bus dengan setidaknya satu langganan.
  • Akses kontributor ke namespace Service Bus. Navigasi ke namespace Service Bus Anda di portal Microsoft Azure, lalu pilih Kontrol akses (IAM) ,dan pilih tab peran Penetapan. Verifikasi bahwa Anda memiliki akses kontributor ke namespace.
  • Selain itu, Anda memerlukan langganan Event Grid untuk namespace Service Bus. Langganan ini menerima pemberitahuan dari Event Grid bahwa ada pesan yang akan diambil. Pelanggan umum dapat menjadi fitur Logic Apps dari Azure App Service, Azure Functions, atau webhook yang menghubungi aplikasi web. Pelanggan kemudian memproses pesan.

19

Jenis peristiwa yang tersedia

Microsoft Azure Service Bus menimbulkan jenis peristiwa berikut:

Jenis peristiwa Deskripsi
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Muncul saat pesan aktif baru tiba dalam antrean atau langganan dan tidak ada penerima yang mendengarkan.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Muncul ketika pesan aktif baru tiba dalam antrean surat mati dan tidak ada pendengar aktif.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Dimunculkan setiap 30 detik jika ada pesan aktif dalam antrean atau langganan, meskipun ada pendengar aktif pada antrean atau langganan tersebut. Hal ini juga dimunculkan ketika jumlah pesan aktif beralih dari 0 ke nilai positif untuk antrean atau langganan.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Dimunculkan setiap 30 detik jika ada pesan di entitas huruf mati dari antrean atau langganan, bahkan jika ada pendengar aktif di entitas dead-letter dari antrean atau langganan tertentu. Hal ini juga dimunculkan ketika jumlah pesan huruf mati beralih dari 0 ke nilai positif untuk entitas huruf mati dari antrean atau langganan.

Contoh kejadian

Pesan aktif tersedia tanpa pendengar

Peristiwa ini dihasilkan jika Anda memiliki pesan aktif dalam antrean atau langganan dan tidak ada penerima yang mendengarkan.

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Pesan surat mati tersedia tanpa pendengar

Skema untuk peristiwa antrian surat gagal serupa. Anda mendapatkan setidaknya satu peristiwa per antrean huruf mati yang memiliki pesan dan tidak ada penerima aktif.

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Pesan aktif yang tersedia pemberitahuan berkala

Kejadian ini dihasilkan secara berkala jika Anda memiliki pesan aktif dalam antrean atau langganan tertentu, meskipun ada pendengar aktif untuk antrean atau langganan tertentu tersebut.

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Pesan surat mati yang tersedia pemberitahuan berkala

Peristiwa ini dibuat secara berkala jika Anda memiliki pesan deadletter pada antrean atau langganan tertentu, bahkan jika ada pendengar aktif pada entitas deadletter dari antrean atau langganan tertentu tersebut.

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Properti peristiwa

Sebuah peristiwa memiliki data tingkat atas berikut ini:

Properti Jenis Deskripsi
topic string Jalur sumber daya penuh ke sumber peristiwa. Bidang ini tidak dapat ditulisi. Event Grid menyediakan nilai ini.
subject string Jalur yang ditentukan penerbit ke subjek kejadian.
eventType string Salah satu jenis kejadian terdaftar untuk sumber kejadian ini.
eventTime string Waktu peristiwa dihasilkan berdasarkan waktu UTC penyedia.
id string Pengidentifikasi unik untuk peristiwa.
data objek Data peristiwa penyimpanan blob.
dataVersion string Versi skema objek data. Penerbit mendefinisikan versi skema.
metadataVersion string Versi skema metadata peristiwa. Azure Event Grid menentukan skema properti tingkat atas. Event Grid menyediakan nilai ini.

Objek data memiliki properti berikut:

Properti Jenis Deskripsi
namespaceName string Namespace Azure Service Bus tempat sumber daya ada.
requestUri string URI ke antrean atau langganan tertentu yang menimbulkan peristiwa.
entityType string Jenis entitas Azure Service Bus yang menimbulkan peristiwa (antrean atau langganan).
queueName string Antrean dengan pesan aktif jika berlangganan antrean. Nilai null jika menggunakan topik / langganan.
topicName string Topik langganan Azure Service Bus dengan pesan aktif yang dimiliki. Nilai null jika menggunakan antrian.
subscriptionName string Langganan Azure Service Bus dengan pesan aktif. Nilai null jika menggunakan antrian.

Langganan Event Grid untuk namespace Service Bus

Anda dapat membuat langganan Event Grid untuk namespace Service Bus dengan tiga cara berbeda:

  • Portal Microsoft Azure. Lihat tutorial berikut untuk mempelajari cara menggunakan portal Microsoft Azure untuk membuat langganan Event Grid untuk peristiwa Service Bus dengan Azure Logic Apps dan Azure Functions sebagai handler.
  • Azure CLI. Contoh CLI berikut ini menunjukkan cara membuat langganan Azure Functions untuk topik sistem yang dibuat oleh namespace Service Bus.

    namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv
    
    az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME>" --endpoint "<your_endpoint_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    
  • PowerShell. Berikut contohnya:
    $namespaceID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -NamespaceName "<YOUR NAMESPACE NAME>").Id
    
    New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME>" -ResourceId $namespaceID -Endpoint "<YOUR ENDPOINT URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    

Berapa banyak peristiwa yang dikeluarkan, dan seberapa sering?

Jika memiliki beberapa antrean dan topik atau langganan di namespace, Anda mendapatkan setidaknya satu peristiwa per antrean dan satu per langganan. Peristiwa segera dikeluarkan jika tidak ada pesan di entitas Service Bus dan pesan baru tiba. Atau, peristiwa dikeluarkan setiap dua menit kecuali Service Bus mendeteksi penerima aktif. Penjelajahan pesan tidak mengganggu peristiwa.

Secara default, Service Bus mengeluarkan peristiwa untuk semua entitas di namespace. Jika Anda ingin mendapatkan peristiwa hanya untuk entitas tertentu, lihat bagian berikutnya.

Menggunakan filter untuk membatasi asal peristiwa

Jika Anda ingin mendapatkan peristiwa hanya dari, misalnya, satu antrean atau satu langganan di dalam namespace Anda, Anda dapat menggunakan filter Mulai dengan atau Akhiri dengan yang disediakan oleh Event Grid. Di beberapa antarmuka, filter disebut filter Pre dan Suffix. Jika ingin mendapatkan peristiwa untuk beberapa, tetapi tidak semua, antrean dan langganan, Anda dapat membuat beberapa langganan Event Grid dan menyediakan filter untuk masing-masing peristiwa.

Langkah berikutnya

Lihat tutorial berikut di GitHub: