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

Service Bus artık bir alıcı mevcut olmadığında ve bir kuyrukta veya abonelikte iletiler olduğunda olayları Event Grid’e gönderebilir. 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ına gidin ve ardından erişim denetimi (ıam) seçeneğini belirleyin ve rol atamaları sekmesini seçin. Ad alanına katkıda bulunan erişimi 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 gösterir:

Olay türü Açıklama
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Kuyrukta veya Abonelikte etkin iletiler olduğunda ve alıcıların dinlemesi yok olduğunda oluşur.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Bir İleti İletiSi Kuyruğunda etkin iletiler olduğunda ve etkin dinleyiciler yok olduğunda ortaya çıkar.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Bir kuyrukta veya abonelikte etkin iletiler varsa, o kuyrukta veya abonelikte etkin dinleyiciler olsa bile her 30 saniyede bir yükseltildi. Ayrıca, etkin ileti sayısı kuyruk veya abonelik için 0'dan pozitif bir değere geçişte de ortaya çıkar.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Belirli bir kuyruğun veya aboneliğin ileti olmayan varlığında etkin dinleyiciler olsa bile, bir kuyruğun veya aboneliğin ileti olmayan varlığında iletiler varsa her 30 saniyede bir yükseltildi. Ayrıca, ileti sayısı 0'dan kuyruğun veya aboneliğin geçilen harf varlığı için pozitif bir değere geçiş olduğunda da oluşturulur.

Örnek olay

Etkin İletiler Dinleyici Yok

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

DinleyiciLeri Yok Olan Deadletter İletileri

Bir ileti kuyruğu olayı için şema benzerdir. İletileri olan ve etkin alıcısı olmayan her bir ileti kuyruğu için 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 İletiler Düzenli Aralıklarla Kullanılabilir Bildirimler

Belirli bir kuyrukta veya abonelikte etkin iletileriniz varsa, o kuyrukta veya abonelikte etkin dinleyiciler olsa bile 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"
}]

Deadletter Messages Available Periodic Notifications

Belirli bir kuyruğun veya aboneliğin deadletter varlığında etkin dinleyiciler olsa bile belirli bir kuyrukta veya abonelikte deadletter 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.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 en üst düzey verilere sahip:

Özellik Tür Description
topic dize Olay kaynağının tam kaynak yolu. Bu alan yazılabilir değildir. 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 saatlerine göre olayın oluşturulma zamanı.
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 Service Bus ad alanı.
requestUri string Olayı yayan belirli bir kuyruğa veya aboneliğe yönelik URI.
entityType string Olayları yayan Service Bus varlık türü (kuyruk veya abonelik).
queueName string Bir kuyruğa abone olursa etkin iletilere sahip kuyruk. Konu başlıkları / abonelikler kullanıyorsanız null değer.
topicName string Etkin iletilerin Service Bus aboneliğinin ait olduğu konu. Kuyruk kullanıyorsanız null değer.
subscriptionName string Etkin Service Bus abonelik. Kuyruk kullanıyorsanız null değer.

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 ve Azure işlevlerine sahip Service Bus olaylara yönelik işleyiciler için Event Grid abonelikleri oluşturmak üzere Azure portal nasıl kullanacağınızı öğrenmek için aşağıdaki öğreticilere bakın.
  • Azure CLI. aşağıdaki clı örneği, bir Service Bus ad alanı tarafından oluşturulan bir sistem konusu için Azure işlevleri aboneliğinin nasıl oluşturulacağını göstermektedir.

    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. İleti taraması, 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 filtrelere, ön ve sonek filtreleri adı verilir. 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: