Поделиться через


Общие сведения об интеграции служебной шины Azure с сеткой событий

Служба Service Bus может отправлять события в Event Grid, когда в очереди или подписке есть сообщения, а получателей нет. Вы можете создавать подписки на Event Grid в пространствах имён службы шины, прослушивать эти события, а затем реагировать на них, запуская приёмник. С помощью этой функции можно использовать служебную шину в реактивных моделях программирования. Ключевой сценарий этой функции в том, что очереди или подписки Service Bus с низким объемом сообщений не нуждаются в приемнике, который постоянно опрашивает сообщения.

Чтобы включить эту функцию, вам потребуется следующее:

  • Пространство имен Service Bus Premium с не менее чем одной очередью или разделом Service Bus с не менее чем одной подпиской.
  • Доступ участника к пространству имен служебной шины. Перейдите к пространству имен Service Bus на портале Azure, а затем выберите Управление доступом (IAM) и перейдите на вкладку Назначения ролей. Убедитесь, что у вас есть роль участника к пространству имен.
  • Кроме того, для пространства имен Service Bus требуется подписка на Event Grid. Эта подписка получает уведомление от Event Grid о наличии сообщений, которые нужно забрать. Типичными подписчиками могут быть функция Logic Apps службы приложений Azure, Azure Functions, или веб-перехватчик, связывающийся с веб-приложением. Затем подписчик обрабатывает сообщения.

19

Доступные типы событий

Сервисная шина генерирует следующие типы событий:

Тип события Описание
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Вызывается при поступлении нового активного сообщения в очередь или подписку, и получатели не прослушивают.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Вызывается при поступлении новых активных сообщений в очередь недоставленных писем и отсутствии активных слушателей.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Вызывается каждые 30 секунд, если в очереди или подписке имеются активные сообщения, даже когда в этой конкретной очереди или подписке присутствуют активные слушатели. Оно также возникает, когда активное количество сообщений в очереди или подписке переходит с 0 на положительное значение.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Вызывается каждые 30 секунд, если в сущности недоставленных сообщений очереди или подписки есть сообщения, даже если на сущности недоставленных сообщений этой очереди или подписки имеются активные прослушиватели. Это также происходит, когда число писем в папке для недоставленных сообщений переходит от 0 к положительному значению для папки для недоставленных сообщений в очереди или подписке.

Пример события

Активные сообщения, доступные без прослушивателей

Это событие создается, если у вас есть активные сообщения в очереди или подписке, и нет приемников, которые их прослушивают.

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

Сообщения с истекшим сроком действия, доступные без активных слушателей

Схема события очереди недоставленных писем аналогична. Вы получаете как минимум одно событие для очереди недоставленных писем, в которой есть сообщения и нет активных приемников.

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

Доступны активные сообщения и периодические уведомления

Это событие периодически генерируется, если у вас есть активные сообщения в определенной очереди или подписке, даже если в этой конкретной очереди или подписке есть активные прослушиватели.

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

Сообщения о недоставленных письмах, доступные периодические уведомления

Это событие периодически создается, если у вас есть сообщения в мертвых письмах в определенной очереди или подписке, даже если активные слушатели подключены к сущности мертвых писем этой очереди или подписки.

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

Свойства события

Событие содержит следующие данные верхнего уровня:

Недвижимость Тип Описание
topic струна Полный путь ресурса к источнику события. Это поле недоступно для записи. Сетка событий предоставляет это значение.
subject струна Заданный издателем путь к теме события.
eventType струна Один из зарегистрированных типов событий для этого источника событий.
eventTime струна Время генерирования события определяется на основе времени UTC поставщика.
id струна Уникальный идентификатор события.
data объект Данные событий Service Bus.
dataVersion струна Версия схемы объекта данных. Версию схемы определяет издатель.
metadataVersion струна Версия схемы метаданных события. Сетка событий определяет схему свойств верхнего уровня. Сетка событий предоставляет это значение.

Объект данных имеет следующие свойства:

Недвижимость Тип Описание
namespaceName струна Пространство имен служебной шины, в котором находится ресурс.
requestUri струна Универсальный код ресурса (URI) для конкретной очереди или подписки, создающей событие.
entityType струна Тип сущности служебной шины, создающей события (очередь или подписку).
queueName струна Очередь с активными сообщениями, если происходит подписка на очередь. Значение NULL при использовании тем или подписок.
topicName струна Раздел, к которому относится подписка службы шины с активными сообщениями. Значение NULL, если используется очередь.
subscriptionName струна Подписка Service Bus с активными сообщениями. Значение NULL, если используется очередь.

Подписки Event Grid для пространств имен Service Bus

Подписки сетки событий для пространств имен служебной шины можно создавать тремя способами:

  • Портал Azure. Ознакомьтесь со следующими руководствами, чтобы узнать, как использовать портал Azure для создания подписок Event Grid для событий Service Bus с помощью Azure Logic Apps и Azure Functions в качестве обработчиков.
  • Azure CLI. В следующем примере CLI показано, как создать подписку для функций Azure для системной темы, созданной пространством имен 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. Приведем пример:
    $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>"
    

Сколько событий генерируется и сколько часто?

Если в пространстве имен есть несколько очередей и тем или подписок, вы получите по крайней мере одно событие на очередь и на подписку. События создаются немедленно, если в объекте Service Bus нет сообщений, а новое сообщение поступает. Или события создаются каждые две минуты, если Service Bus не обнаруживает активного приемника. Просмотр сообщений не прерывает события.

По умолчанию служебная шина выдает события для всех сущностей в пространстве имен. Если вы хотите получить только события для определенных сущностей, см. следующий раздел.

Используйте фильтры, чтобы ограничить источники событий.

Если вы хотите получать события только из, например, одной очереди или одной подписки в пространстве имен, можно использовать фильтры «Начинается с» или «Заканчивается на», предоставляемые Event Grid. В некоторых интерфейсах фильтры называются фильтрами Pre и Suffix . Если вы хотите получить события для нескольких, но не всех, очередей и подписок, можно создать несколько подписок на Event Grid и задать фильтр для каждой.

Дальнейшие шаги

Ознакомьтесь со следующими руководствами: