Az Azure Service Bus – Azure Event Grid integráció áttekintése

A Service Bus eseményeket tud kibocsátani az Event Gridnek, ha üzenetek vannak egy üzenetsorban vagy egy előfizetésben, ha nincsenek fogadók. Létrehozhat Event Grid-előfizetéseket a Service Bus-névterekhez, megfigyelheti ezeket az eseményeket, és egy fogadó indításával reagálhat rájuk. Ezzel a funkcióval a Service Bus reaktív programozási modellekben használható. A funkció által nyújtott legfontosabb előny, hogy a kevés üzenettel rendelkező Service Bus üzenetsoroknak vagy előfizetéseknek nem kell olyan fogadóval rendelkezniük, amely folyamatosan üzeneteket kérdez le.

A funkció engedélyezéséhez a következőkre van szüksége:

  • Egy prémium szintű Service Bus-névtér legalább egy Service Bus-üzenetsorral, vagy pedig egy legalább egy előfizetéssel rendelkező Service Bus-témakör.
  • Közreműködői hozzáférés a Service Bus-névtérhez. Lépjen a Service Bus-névtérre a Azure Portal, majd válassza a Hozzáférés-vezérlés (IAM) lehetőséget, és válassza a Szerepkör-hozzárendelések lapot. Ellenőrizze, hogy rendelkezik-e közreműködői hozzáféréssel a névtérhez.
  • Ezenkívül szükség van egy Event Grid-előfizetésre a Service Bus-névtérhez. Ez az előfizetés értesítést kap az Event Gridtől, ha üzeneteket kell átvenni. Tipikus előfizetők lehetnek az Azure App Service Logic Apps funkciója, az Azure Functions vagy egy webalkalmazáshoz csatlakozó webhook. Az üzeneteket ezután az előfizető dolgozza fel.

19

Elérhető eseménytípusok

A Service Bus a következő eseménytípusokat bocsátja ki:

Eseménytípus Leírás
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Akkor jön létre, amikor egy új aktív üzenet érkezik egy üzenetsorba vagy előfizetésbe, és nincsenek fogadók figyelve.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Akkor merül fel, amikor egy új aktív üzenet kézbesítetlen üzenetsorba érkezik, és nincsenek aktív figyelők.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications 30 másodpercenként történik, ha aktív üzenetek vannak egy üzenetsorban vagy előfizetésben, még akkor is, ha aktív figyelők vannak az adott üzenetsoron vagy előfizetésen. Akkor is megjelenik, ha az aktív üzenetek száma 0-ról pozitív értékre vált az üzenetsor vagy az előfizetés esetében.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications 30 másodpercenként történik, ha egy üzenetsor vagy előfizetés kézbesíthetetlen üzenet entitásában vannak üzenetek, még akkor is, ha aktív figyelők vannak az adott üzenetsor vagy előfizetés kézbesíthetetlen üzenet entitásán. Ez akkor is felmerül, ha a kézbesítetlen üzenetek száma 0-ról pozitív értékre vált az üzenetsor vagy előfizetés kézbesíthetetlen levelek entitására vonatkozóan.

Példaesemény

Figyelők nélkül elérhető aktív üzenetek

Ez az esemény akkor jön létre, ha aktív üzenetek találhatók egy üzenetsorban vagy előfizetésben, és nincsenek figyelő fogadók.

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

Kézbesíthetetlen üzenetek figyelők nélkül

A kézbesítetlen levelek üzenetsor-eseményének sémája hasonló. Üzenetsoronként legalább egy olyan eseményt kap, amely üzeneteket tartalmaz, és nincsenek aktív fogadók.

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

Aktív üzenetek – rendszeres értesítések

Ez az esemény rendszeres időközönként jön létre, ha aktív üzenetei vannak az adott üzenetsorban vagy előfizetésben, még akkor is, ha az adott üzenetsorhoz vagy előfizetéshez aktív figyelők tartoznak.

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

Kézbesíthetetlen üzenetek – rendszeres értesítések érhetők el

Ez az esemény rendszeres időközönként jön létre, ha az adott üzenetsoron vagy előfizetésen holtponti üzenetek vannak, még akkor is, ha aktív figyelők vannak az adott üzenetsor vagy előfizetés deadletter entitásán.

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

Esemény tulajdonságai

Egy esemény a következő legfelső szintű adatokkal rendelkezik:

Tulajdonság Típus Description
topic sztring Az eseményforrás teljes erőforrás-elérési útja. Ez a mező nem írható. Az értéket az Event Grid adja meg.
subject sztring Az esemény tárgyra mutató, a közzétevő által megadott elérési út.
eventType sztring Az eseményforráshoz felvett eseménytípusok egyike.
eventTime sztring Az esemény létrehozási ideje a szolgáltató UTC-ideje alapján.
id sztring Az esemény egyedi azonosítója.
data object Blob Storage-eseményadatok.
dataVersion sztring Az adatobjektum sémaverziója. A sémaverziót a közzétevő határozza meg.
metadataVersion sztring Az esemény metaadatok sémaverziója. A legfelső szintű tulajdonságokra az Event Grid határozza meg a sémát. Az értéket az Event Grid adja meg.

Az adatobjektum a következő tulajdonságokkal rendelkezik:

Tulajdonság Típus Description
namespaceName sztring Az erőforrásban található Service Bus-névtér.
requestUri sztring Az eseményt kibocsátó adott üzenetsor vagy előfizetés URI-ja.
entityType sztring Az eseményeket (üzenetsort vagy előfizetést) kibocsátó Service Bus-entitás típusa.
queueName sztring Az üzenetsor aktív üzenetekkel, ha feliratkozik egy üzenetsorra. Null értékű, ha témaköröket/előfizetéseket használ.
topicName sztring Az aktív üzenetekkel rendelkező Service Bus-előfizetés témaköre. Érték null, ha üzenetsort használ.
subscriptionName sztring A Service Bus-előfizetés aktív üzenetekkel. Érték null, ha üzenetsort használ.

Event Grid-előfizetések Service Bus-névterekhez

Három különböző módon hozhatók létre Event Grid-előfizetések a Service Bus-névterekhez.

  • Azure Portal. Az alábbi oktatóanyagok segítségével megtudhatja, hogyan hozhat létre Event Grid-előfizetéseket a Service Bus-eseményekhez az Azure Logic Apps és Azure Functions kezelőként az Azure Portal használatával.
  • Azure CLI. Az alábbi CLI-példa bemutatja, hogyan hozhat létre Azure Functions-előfizetést egy Service Bus-névtér által létrehozott rendszertémakörhöz.

    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. Bemutatunk egy példát:
    $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>"
    

Hány eseményt bocsát ki és milyen gyakran?

Ha több üzenetsora és témaköre / előfizetése található a névtéren, üzenetsoronként vagy előfizetésenként legalább egy eseményt kap. Az események kibocsátása azonnal megtörténik, ha nincsenek üzenetek a Service Bus entitásban, és új üzenet érkezik. Vagy pedig két percenként, ha az Azure Service Bus nem észlel aktív fogadót. Az üzenetböngészés nem szakítja meg az eseményeket.

Alapértelmezés szerint a Service Bus a névtérben lévő összes entitáshoz eseményeket bocsát ki. Ha csak adott entitásokhoz szeretne eseményeket kapni, tekintse meg a következő szakaszt.

Az események forrásainak korlátozása szűrők használatával

Ha a névtérben például csak egy üzenetsor vagy egy előfizetés eseményeit szeretné megkapni, az Event Grid Kezdete és Vége szűrőit használhatja. Egyes interfészek esetén a szűrők Előtag és Utótag néven szerepelnek. Ha több üzenetsorból és előfizetésből, de nem az összesből szeretne eseményeket kapni, létrehozhat több különböző Event Grid-előfizetést, és mindegyikhez megadhat egy-egy szűrőt.

Következő lépések

Lásd az alábbi oktatóanyagokat: