Přehled integrace služby Azure Service Bus do služby Event Grid
V případě, že fronta nebo odběr obsahuje zprávy a nejsou k dispozici žádní příjemci, teď může Service Bus vysílat události do služby Event Grid. Pro obory názvů služby Service Bus můžete vytvářet odběry služby Event Grid, naslouchat těmto událostem a pak na ně reagovat spuštěním příjemce. Díky této funkci můžete službu Service Bus využívat v reaktivních programovacích modelech. Klíčovým scénářem, který tato funkce umožňuje, je, že se příjemce nemusí neustále dotazovat na zprávy z front nebo odběrů služby Service Bus, které obsahují malé množství zpráv.
K povolení této funkce potřebujete následující položky:
- Obor názvů služby Service Bus úrovně Premium alespoň s jednou frontou služby Service Bus nebo jedním tématem služby Service Bus s alespoň jedním oděrem.
- Přístup přispěvatele k tomuto oboru názvů služby Service Bus. V seznamu Service Bus přejděte ke svému oboru názvů Azure Portal, vyberte Řízení přístupu (IAM) a vyberte kartu Přiřazení rolí. Ověřte, že máte přístup přispěvatele k oboru názvů.
- Kromě toho potřebujete odběr služby Event Grid pro tento obor názvů služby Service Bus. Tento odběr přijímá ze služby Event Grid oznámení o zprávách čekajících na vyzvednutí. Typickými odběrateli můžou být funkce Logic Apps v Azure App Service, služba Azure Functions nebo webhook kontaktující webovou aplikaci. Odběratel pak zprávy zpracuje.

Dostupné typy událostí
Service Bus generuje následující typy událostí:
| Typ události | Popis |
|---|---|
| Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners | Vyvoláno, když jsou ve frontě nebo odběru aktivní zprávy a žádní příjemci naslouchají. |
| Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners | Je vyvolána, když jsou aktivní zprávy ve frontě zpráv bez aktivních naslouchacích událostí. |
| Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications | Vyvoláno každých 30 sekund, pokud jsou ve frontě nebo odběru aktivní zprávy, i když jsou aktivní naslouchače pro konkrétní frontu nebo odběr. Je také vyvolána, když počet aktivních zpráv přechází z 0 na kladnou hodnotu pro frontu nebo odběr. |
| Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications | Vyvoláno každých 30 sekund, pokud jsou v entitě dead-letter fronty nebo odběru zprávy, a to i v případě, že jsou aktivní naslouchací objekty pro entitu dead-letter této konkrétní fronty nebo odběru. Je také vyvolána při přechodu počtu zpráv bez zprávy z 0 na kladnou hodnotu pro entitu dead-letter fronty nebo odběru. |
Příklad události
Aktivní zprávy dostupné bez naslouchacích prvků
Tato událost se generuje v případě, že ve frontě nebo odběru máte aktivní zprávy, ale žádný příjemce nenaslouchá.
[{
"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"
}]
Dostupné zprávy deadletter bez naslouchacích událostí
Schéma události fronty zpráv je podobné. Dostanete alespoň jednu událost pro každou frontu zpráv, která obsahuje zprávy, a žádné aktivní příjemce.
[{
"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"
}]
Aktivní zprávy Dostupná pravidelná oznámení
Tato událost se generuje pravidelně, pokud máte aktivní zprávy v konkrétní frontě nebo odběru, i když jsou v této konkrétní frontě nebo odběru aktivní naslouchače.
[{
"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"
}]
Pravidelná oznámení k dostupným zprávám deadletter
Tato událost se generuje pravidelně, pokud máte zprávy deadletter v konkrétní frontě nebo odběru, i když jsou aktivní naslouchací objekty na entitě deadletter konkrétní fronty nebo odběru.
[{
"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"
}]
Vlastnosti události
Událost obsahuje následující data nejvyšší úrovně:
| Vlastnost | Typ | Description |
|---|---|---|
topic |
řetězec | Úplná cesta prostředku ke zdroji událostí. Toto pole není zapisovatelné. Tuto hodnotu poskytuje Event Grid. |
subject |
řetězec | Cesta k předmětu události, kterou definuje vydavatel. |
eventType |
řetězec | Jeden z registrovaných typů události pro tento zdroj události. |
eventTime |
řetězec | Čas vygenerování události na základě času UTC poskytovatele. |
id |
řetězec | Jedinečný identifikátor události |
data |
object | Data událostí úložiště objektů blob. |
dataVersion |
řetězec | Verze schématu datového objektu. Verzi schématu definuje vydavatel. |
metadataVersion |
řetězec | Verze schématu metadat události. Schéma vlastností nejvyšší úrovně definuje Event Grid. Tuto hodnotu poskytuje Event Grid. |
Datový objekt má následující vlastnosti:
| Vlastnost | Typ | Description |
|---|---|---|
namespaceName |
řetězec | Obor Service Bus, ve které prostředek existuje. |
requestUri |
řetězec | Identifikátor URI konkrétní fronty nebo odběru, který událost vysílá. |
entityType |
řetězec | Typ entity Service Bus události (fronta nebo odběr). |
queueName |
řetězec | Fronta s aktivními zprávami při přihlášení k odběru fronty. Hodnota null, pokud používáte témata nebo odběry. |
topicName |
řetězec | Téma, do Service Bus předplatné s aktivními zprávami patří. Pokud používáte frontu, hodnota null. |
subscriptionName |
řetězec | předplatné Service Bus s aktivními zprávami. Pokud používáte frontu, hodnota null. |
Event Grid předplatná pro Service Bus obory názvů
Odběry služby Event Grid pro obory názvů služby Service Bus můžete vytvořit třemi různými způsoby:
- Azure Portal. V následujících kurzech se dozvíte, jak pomocí Azure Portal vytvářet odběry Event Grid pro události Service Bus s Azure Logic Apps a Azure Functions jako obslužných rutin.
Azure CLI Následující příklad rozhraní příkazového řádku ukazuje, jak Azure Functions předplatné pro systémové téma vytvořené oborem názvů Service Bus serveru.
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. Tady je příklad:
$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>"
V jakém množství se vysílají události a jak často?
Pokud v oboru názvů máte více front a témat nebo odběrů, obdržíte alespoň jednu událost za každou frontu a jednu událost za každý odběr. Pokud entita služby Service Bus neobsahuje žádné zprávy, události se vysílají okamžitě po přijetí nové zprávy. Případně se události vysílají každé dvě minuty, pokud služba Service Bus nedetekuje aktivního příjemce. Procházení zpráv tyto události nepřeruší.
Ve výchozím nastavení služba Service Bus vysílá události pro všechny entity v příslušném oboru názvů. Pokud chcete přijímat pouze události pro konkrétní entity, přečtěte si následující část.
Použití filtrů k omezení zdrojů událostí
Pokud chcete přijímat události například pouze z jedné fronty nebo jednoho odběru v rámci vašeho oboru názvů, můžete k tomu použít filtry Začíná na a Končí na, které poskytuje služba Event Grid. V některých rozhraních se tyto filtry označují jako Předpona a Přípona. Pokud chcete přijímat události pro více front a odběrů, ale ne pro všechny, můžete vytvořit více odběrů služby Event Grid a pro každý z nich zadat filtr.
Další kroky
Projděte si tyto kurzy: