Udostępnij za pośrednictwem


Omówienie integracji usług Azure Service Bus i Event Grid

Usługa Service Bus może emitować zdarzenia do usługi Event Grid, gdy w kolejce lub w subskrypcji nie ma żadnych odbiorników. Można tworzyć subskrypcje usługi Event Grid powiązane z przestrzeniami nazw usługi Service Bus, nasłuchiwać tych zdarzeń, a następnie reagować na nie przez uruchomienie odbiornika. W przypadku tej funkcji usługa Service Bus może być używana w reaktywnych modelach programowania. Kluczowy scenariusz tej funkcji polega na tym, że subskrypcje lub kolejki usługi Service Bus z małą liczbą komunikatów nie muszą mieć odbiornika przeprowadzającego sondowanie w poszukiwaniu komunikatów.

Do włączenia tej funkcji potrzebne są następujące elementy:

  • Przestrzeń nazw usługi Service Bus w warstwie Premium z co najmniej jedną kolejką lub tematem usługi Service Bus i co najmniej jedną subskrypcją.
  • Dostęp współautora do przestrzeni nazw usługi Service Bus. Przejdź do przestrzeni nazw usługi Service Bus w Azure Portal, a następnie wybierz pozycję Kontrola dostępu (IAM) i wybierz kartę Przypisania ról. Sprawdź, czy masz dostęp współautora do przestrzeni nazw.
  • Ponadto potrzebujesz subskrypcji usługi Event Grid dla przestrzeni nazw usługi Service Bus. Ta subskrypcja otrzymuje z usługi Event Grid powiadomienia o komunikatach do pobrania. Typowymi subskrybentami mogą być funkcja Logic Apps usługi Azure App Service, funkcje Azure Functions lub element webhook kontaktujący się z aplikacją internetową. Następnie subskrybent przetwarza komunikaty.

19

Dostępne typy zdarzeń

Usługa Service Bus emituje następujące typy zdarzeń:

Typ zdarzenia Opis
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Podniesione, gdy nowy aktywny komunikat pojawia się w kolejce lub subskrypcji i nie ma odbiorników nasłuchiwania.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Podniesione, gdy nowe aktywne komunikaty docierają do kolejki utraconych wiadomości i nie ma aktywnych odbiorników.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Podniesione co 30 sekund, jeśli istnieją aktywne komunikaty w kolejce lub subskrypcji, nawet jeśli istnieją aktywne odbiorniki w tej konkretnej kolejce lub subskrypcji. Jest on również zgłaszany, gdy liczba aktywnych komunikatów przechodzi z 0 do wartości dodatniej dla kolejki lub subskrypcji.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Podniesione co 30 sekund, jeśli w jednostce utraconych wiadomości znajduje się kolejka lub subskrypcja, nawet jeśli istnieją aktywne odbiorniki w jednostce utraconych komunikatów tej konkretnej kolejki lub subskrypcji. Jest ona również wywoływana, gdy liczba komunikatów utraconych przechodzi z 0 do wartości dodatniej dla jednostki utraconych wiadomości w kolejce lub subskrypcji.

Przykładowe zdarzenie

Aktywne komunikaty dostępne bez odbiorników

To zdarzenie jest generowane, jeśli masz aktywne komunikaty w kolejce lub subskrypcji i nie ma nasłuchujących odbiorników.

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

Komunikaty o utraconych wiadomościach, które nie są dostępne bez odbiorników

Schemat zdarzenia kolejki utraconych listów jest podobny. Otrzymujesz co najmniej jedno zdarzenie na kolejkę utraconych komunikatów i brak aktywnych odbiorników.

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

Aktywne komunikaty dostępne okresowe powiadomienia

To zdarzenie jest generowane okresowo, jeśli masz aktywne komunikaty w określonej kolejce lub subskrypcji, nawet jeśli istnieją aktywne odbiorniki dla tej konkretnej kolejki lub subskrypcji.

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

Komunikaty o utraconych wiadomościach są dostępne okresowe powiadomienia

To zdarzenie jest generowane okresowo, jeśli w określonej kolejce lub subskrypcji są wyświetlane komunikaty deadletter, nawet jeśli istnieją aktywne odbiorniki w jednostce deadletter tej konkretnej kolejki lub subskrypcji.

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

Właściwości zdarzenia

Zdarzenie ma następujące dane najwyższego poziomu:

Właściwość Typ Opis
topic ciąg Pełna ścieżka zasobu do źródła zdarzeń. To pole nie jest możliwe do zapisu. Ta wartość jest podawana przez usługę Event Grid.
subject ciąg Zdefiniowana przez wydawcę ścieżka do tematu zdarzenia.
eventType ciąg Jeden z zarejestrowanych typów zdarzeń dla tego źródła zdarzeń.
eventTime ciąg Czas generowania zdarzenia na podstawie czasu UTC dostawcy.
id ciąg Unikatowy identyfikator zdarzenia.
data object Dane zdarzeń usługi Blob Storage.
dataVersion ciąg Wersja schematu obiektu danych. Wydawca definiuje wersję schematu.
metadataVersion ciąg Wersja schematu metadanych zdarzenia. Usługa Event Grid definiuje schemat właściwości najwyższego poziomu. Ta wartość jest podawana przez usługę Event Grid.

Obiekt danych ma następujące właściwości:

Właściwość Typ Opis
namespaceName ciąg Przestrzeń nazw usługi Service Bus, w ramach których istnieje zasób.
requestUri ciąg Identyfikator URI do określonej kolejki lub subskrypcji emitujące zdarzenie.
entityType ciąg Typ jednostki usługi Service Bus emitujących zdarzenia (kolejka lub subskrypcja).
queueName ciąg Kolejka z aktywnymi komunikatami, jeśli subskrybuje kolejkę. Wartość null, jeśli używasz tematów/subskrypcji.
topicName ciąg Temat subskrypcji usługi Service Bus z aktywnymi komunikatami należy do. Wartość null, jeśli używasz kolejki.
subscriptionName ciąg Subskrypcja usługi Service Bus z aktywnymi komunikatami. Wartość null, jeśli używasz kolejki.

Subskrypcje usługi Event Grid dla przestrzeni nazw usługi Service Bus

Istnieją trzy różne sposoby tworzenia subskrypcji usługi Event Grid dla przestrzeni nazw usługi Service Bus:

  • Azure Portal. Zapoznaj się z poniższymi samouczkami, aby dowiedzieć się, jak używać Azure Portal do tworzenia subskrypcji usługi Event Grid dla zdarzeń usługi Service Bus za pomocą usługi Azure Logic Apps i Azure Functions jako programy obsługi.
  • Interfejs wiersza polecenia platformy Azure. Poniższy przykład interfejsu wiersza polecenia pokazuje, jak utworzyć subskrypcję Azure Functions dla tematu systemowego utworzonego przez przestrzeń nazw usługi 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. Oto przykład:
    $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>"
    

Ile zdarzeń jest emitowanych i jak często?

Jeśli masz wiele kolejek i tematów/subskrypcji w przestrzeni nazw, odbierasz co najmniej jedno zdarzenie na kolejkę i jedno na subskrypcję. Zdarzenia są emitowane natychmiast, jeśli w jednostce usługi Service Bus nie ma komunikatów i nadejdzie nowy komunikat. W przeciwnym razie zdarzenia są emitowane co dwie minuty, chyba że usługa Service Bus wykryje aktywny odbiornik. Przeglądanie komunikatów nie przerywa zdarzeń.

Domyślnie usługa Service Bus emituje zdarzenia dla wszystkich jednostek w przestrzeni nazw. Jeśli chcesz odbierać zdarzenia tylko dla konkretnych jednostek, zapoznaj się z kolejną sekcją.

Odbieranie zdarzeń tylko z wybranych jednostek przy użyciu filtrów

Jeśli na przykład chcesz odbierać zdarzenia tylko z jednej kolejki lub jednej subskrypcji w przestrzeni nazw, możesz użyć filtrów Zaczyna się od i Kończy się na udostępnianych przez usługę Event Grid. W niektórych interfejsach filtry mają nazwy Prefiks i Sufiks. Jeśli chcesz odbierać zdarzenia z wielu, ale nie wszystkich, kolejek i subskrypcji, możesz utworzyć wiele subskrypcji usługi Event Grid i określić filtr dla każdej z nich.

Następne kroki

Zobacz następujące samouczki: