Azure Service Bus - Event Grid tümleştirmesine Genel Bakış

Service Bus, bir kuyrukta veya abonelikte alıcı olmadığında iletiler olduğunda olayları Event Grid'e yayar. Service Bus ad alanlarınıza Event Grid abonelikleri oluşturabilir, bu olayları dinleyebilir ve bir alıcı başlatarak olaylara tepki verebilirsiniz. Bu özellik sayesinde Service Bus’ı reaktif programlama modellerinde kullanabilirsiniz. Bu özelliğin temel kullanım modelinde, düşük ileti hacmine sahip Service Bus kuyruklarının veya aboneliklerinin sürekli olarak iletiler için yoklama yapan bir alıcısının olması gerekmez.

Özelliği etkinleştirmek için gereken öğeler:

  • En az bir Service Bus kuyruğu olan bir Service Bus Premium ad alanı veya en az bir aboneliği olan bir Service Bus konusu.
  • Service Bus ad alanına katkıda bulunan erişimi. Azure portal Service Bus ad alanınıza gidin, Erişim denetimi (IAM) seçeneğini belirleyin ve Rol atamaları sekmesini seçin. Ad alanına katkıda bulunan erişiminizin olduğunu doğrulayın.
  • Ek olarak, Service Bus ad alanı için bir Event Grid aboneliğiniz olması da gerekir. Bu abonelik, alınacak iletiler olduğuna dair Event Grid’den bildirim alır. Normalde aboneler, web uygulaması ile iletişim kuran bir web kancası, Azure İşlevleri veya Azure App Service’in Logic Apps özelliği olabilir. Daha sonra abone iletileri işler.

19

Kullanılabilir olay türleri

Service Bus aşağıdaki olay türlerini yayar:

Olay türü Açıklama
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Yeni bir etkin ileti bir kuyruğa veya aboneliğe ulaştığında ve dinleyen alıcı olmadığında tetiklenir.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Yeni etkin iletiler teslim edilemeyen bir ileti kuyruğuna ulaştığında ve etkin dinleyici olmadığında tetiklenir.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Bir kuyrukta veya abonelikte etkin iletiler varsa, belirli bir kuyrukta veya abonelikte etkin dinleyiciler olsa bile her 30 saniyede bir tetiklenir. Etkin ileti sayısı 0'dan kuyruk veya abonelik için pozitif bir değere geçtiğinde de tetikler.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Bir kuyruğun veya aboneliğin teslim edilemeyen ileti varlığında iletiler varsa, belirli bir kuyruğun veya aboneliğin teslim edilemeyen ileti varlığında etkin dinleyiciler olsa bile her 30 saniyede bir tetiklenir. Ayrıca, teslim edilemeyen ileti sayısı 0'dan kuyruk veya aboneliğin teslim edilemeyen harf varlığı için pozitif bir değere geçtiğinde de tetiklenir.

Örnek olay

Dinleyici olmadan kullanılabilir etkin iletiler

Bir kuyrukta veya abonelikte etkin iletileriniz varsa ve bir alıcı dinleme gerçekleştirmiyorsa bu olay oluşturulur.

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

Dinleyici olmadan kullanılabilir teslim edilemeyen iletiler

Teslim edilemeyen bir kuyruk olayının şeması benzerdir. İletileri olan ve etkin alıcısı olmayan teslim edilemeyen ileti kuyruğu başına en az bir olay alırsınız.

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

Etkin iletiler kullanılabilir düzenli bildirimler

Belirli bir kuyruk veya abonelik için etkin dinleyiciler olsa bile belirli bir kuyrukta veya abonelikte etkin iletileriniz varsa bu olay düzenli aralıklarla oluşturulur.

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

Teslim edilemeyen iletilere düzenli bildirimler sağlanabilir

Belirli bir kuyruk veya aboneliğin deadletter varlığında etkin dinleyiciler olsa bile, belirli bir kuyrukta veya abonelikte ölü iletiniz varsa, bu olay düzenli olarak oluşturulur.

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

Olay özellikleri

Bir olay aşağıdaki üst düzey verilere sahiptir:

Özellik Tür Description
topic dize Olay kaynağının tam kaynak yolu. Bu alan yazılamaz. Event Grid bu değeri sağlar.
subject string Olay konusunun yayımcı tarafından tanımlanan yolu.
eventType string Bu olay kaynağı için kayıtlı olay türlerinden biri.
eventTime string Sağlayıcının UTC saati temelinde olayın oluşturulduğu saat.
id string Olayın benzersiz tanımlayıcısı.
data object Blob depolama olay verileri.
dataVersion string Veri nesnesinin şema sürümü. Şema sürümünü yayımcı tanımlar.
metadataVersion string Olay meta verilerinin şema sürümü. Event Grid en üst düzey özelliklerin şemasını tanımlar. Event Grid bu değeri sağlar.

Veri nesnesi aşağıdaki özelliklere sahiptir:

Özellik Tür Description
namespaceName dize Kaynağın bulunduğu Service Bus ad alanı.
requestUri string Olayı yayan belirli bir kuyruğa veya aboneliğe URI.
entityType string Olayları (kuyruk veya abonelik) yayan Service Bus varlığının türü.
queueName string Kuyruğa abone olurken etkin iletileri olan kuyruk. Konu başlıkları /abonelikler kullanılıyorsa null değeri.
topicName string Etkin iletileri içeren Service Bus aboneliğinin ait olduğu konu. Kuyruk kullanıyorsanız null değeri.
subscriptionName string Etkin iletiler içeren Service Bus aboneliği. Kuyruk kullanıyorsanız null değeri.

Service Bus ad alanları için Event Grid abonelikleri

Service Bus ad alanları için Event Grid abonelikleri oluşturmanın üç farklı yolu vardır:

  • Azure portal. Azure Logic Apps ile Service Bus olayları için Event Grid abonelikleri oluşturmak ve işleyici olarak Azure İşlevleri için Azure portal kullanmayı öğrenmek için aşağıdaki öğreticilere bakın.
  • Azure CLI. Aşağıdaki CLI örneği, Service Bus ad alanı tarafından oluşturulan bir sistem konusu için Azure İşlevleri aboneliğinin nasıl oluşturulacağını gösterir.

    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. Aşağıda bir örnek verilmiştir:
    $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>"
    

Ne sıklıkla ve kaç tane olay gönderilir?

Ad alanında birden fazla kuyruk ve konu veya abonelik varsa, kuyruk başına en az bir ve abonelik başına bir olay alırsınız. Service Bus varlığında bir ileti yoksa ve yeni bir ileti gelirse olaylar hemen gönderilir. Alternatif olarak, Service Bus etkin bir alıcı algılamazsa iki dakikada bir olaylar gönderilir. İletiye göz atma, olayları kesintiye uğratmaz.

Varsayılan olarak Service Bus, ad alanındaki tüm varlıklar için olaylar gönderir. Yalnızca belirli varlıklar için olaylar almak istiyorsanız sonraki bölüme bakın.

Olayları aldığınız yeri sınırlamak için filtreleri kullanma

Örneğin, yalnızca ad alanınızdaki bir abonelik veya kuyruktan olaylar almak istiyorsanız, Event Grid tarafından sağlanan ile başlar veya ile biter filtrelerini kullanabilirsiniz. Bazı arabirimlerde filtreler Ön ve Sonek filtreleri olarak adlandırılır. Tümü için değil, birden fazla kuyruk ve abonelik için olaylar almak istiyorsanız, birden fazla Event Grid aboneliği oluşturabilir ve her birine ilişkin bir filtre sağlayabilirsiniz.

Sonraki adımlar

Aşağıdaki öğreticilere bakın: