Přehled integrace služby Azure Service Bus do služby Event Grid
Service Bus může generovat události do Služby Event Grid, pokud jsou ve frontě nebo odběru zprávy, když nejsou přítomni žádní příjemci. 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 Azure Portal přejděte do oboru názvů služby Service Bus a pak 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ána, když do fronty nebo odběru přijde nová aktivní zpráva a žádní příjemci nenaslouchají. |
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners |
Vyvolána, když do fronty nedoručených zpráv dorazí nové aktivní zprávy a nejsou k dispozici žádné aktivní naslouchací procesy. |
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications |
Vyvolání každých 30 sekund, pokud jsou ve frontě nebo odběru aktivní zprávy, i když jsou v konkrétní frontě nebo odběru aktivní naslouchací procesy. Vyvolá se také, když počet aktivních zpráv přejde z 0 na kladnou hodnotu pro frontu nebo odběr. |
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications |
Vyvolá se každých 30 sekund, pokud jsou v entitě nedoručených zpráv fronty nebo odběru zprávy, i když jsou aktivní naslouchací procesy v entitě nedoručených zpráv dané fronty nebo odběru. Vyvolá se také při přechodu počtu nedoručených zpráv z 0 na kladnou hodnotu pro entitu nedoručených zpráv fronty nebo odběru. |
Příklad události
Aktivní zprávy dostupné bez naslouchacích procesů
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"
}]
Nedoručované zprávy dostupné bez naslouchacích procesů
Schéma události fronty nedoručených zpráv je podobné. Na každou frontu nedoručených zpráv se zobrazí alespoň jedna událost, 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é v pravidelných oznámeních
Tato událost se generuje pravidelně, pokud máte aktivní zprávy v konkrétní frontě nebo odběru, a to i v případě, že pro danou frontu nebo odběr existují aktivní naslouchací procesy.
[{
"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"
}]
Dostupné pravidelné oznámení o nedoručených zprávách
Tato událost se generuje pravidelně, pokud máte v konkrétní frontě nebo předplatném zprávy o nedorucených zprávách, a to i v případě, že jsou aktivní naslouchací procesy v entitě deadletter dané 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 má následující data nejvyšší úrovně:
Vlastnost | Typ | Description |
---|---|---|
topic |
řetězec | Úplná cesta k 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 názvů služby Service Bus, ve které prostředek existuje. |
requestUri |
řetězec | Identifikátor URI konkrétní fronty nebo předplatného, které událost vygenerují. |
entityType |
řetězec | Typ entity služby Service Bus, která generuje 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 které patří odběr služby Service Bus s aktivními zprávami. Hodnota null, pokud používáte frontu. |
subscriptionName |
řetězec | Odběr služby Service Bus s aktivními zprávami. Hodnota null, pokud používáte frontu. |
Odběry Event Gridu pro obory názvů služby Service Bus
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 Služby Event Grid pro události služby Service Bus pomocí Azure Logic Apps a Azure Functions jako obslužné rutiny.
Azure CLI Následující příklad rozhraní příkazového řádku ukazuje, jak vytvořit odběr Azure Functions pro systémové téma vytvořené oborem názvů služby Service Bus.
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 nepřeruší události.
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: