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


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

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

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

  • Пространство имен служебной шины уровня "Премиум" минимум с одной очередью служебной шины или раздел служебной шины минимум с одной подпиской.
  • Доступ к пространству имен служебной шины с правами участника. Перейдите к пространству имен служебной шины на портале Azure, а затем выберите Управление доступом (IAM) и откройте вкладку Назначения ролей. Убедитесь, что у вас есть доступ к пространству имен в качестве участника.
  • Подписка на службу "Сетка событий" для пространства имен служебной шины. Эта подписка необходима для получения из службы "Сетка событий" уведомления о том, что существуют сообщения, ожидающие действий. Типичными подписчиками могут быть компоненты Logic Apps службы приложений Azure или решения "Функции Azure" либо веб-перехватчики, связанные с веб-приложением. Следовательно, подписчики обрабатывают сообщения.

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 объект Данные события хранилища BLOB-объектов.
dataVersion строка Версия схемы для объекта данных. Версию схемы определяет издатель.
metadataVersion строка Версия схемы для метаданных события. Служба "Сетка событий" определяет схему свойств верхнего уровня. Это значение предоставляет служба "Сетка событий".

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

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

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

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

  • На портале Azure. Чтобы узнать, как использовать портал Azure для создания подписок на службу "Сетка событий" для событий служебной шины с Azure Logic Apps и решением "Функции Azure" в качестве обработчиков, ознакомьтесь со следующими учебниками:
  • Azure CLI. В этом примере для CLI показано, как создать подписку на решение "Функции Azure" для системного раздела, созданного пространством имен служебной шины:

    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>"
    

Как часто и в каком количестве выдаются события?

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

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

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

Если нужно получать события, например только из одной очереди или одной подписки в пространстве имен, используйте в службе "Сетка событий" фильтры Начинается с или Оканчивается на. В некоторых интерфейсах эти фильтры называются Префикс и Суффикс. Если требуется получить события для нескольких, но не всех очередей и подписок, создайте несколько подписок на службу "Сетка событий" и укажите для каждой из них фильтр.

Дальнейшие действия

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