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.
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: