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: