Очереди, разделы и подписки Служебной шины

Завершено

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

Очереди

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

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

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

Создавать очереди можно с помощью портала Azure, PowerShell, CLI или шаблонов Resource Manager. Далее через эти очереди можно отправлять и получать сообщения с помощью клиентов, написанных на языках C#, Java, Python и JavaScript.

Режимы приема

Вы можете указать два разных режима в которых Служебная шина получает сообщения: Получить и удалить или Быстрая блокировка.

Получение и удаление

В этом режиме, когда служебная шина получает запрос от потребителя, он помечает сообщение как потребляемое и возвращает его в приложение-получатель. Режим "Получить и удалить сообщение" представляет собой самую простую модель, которая лучше всего работает в ситуациях, когда для приложения допустимо не обрабатывать сообщение при сбое. Для примера рассмотрим сценарий, в котором объект-получатель выдает запрос на получение и аварийно завершается до его обработки. Как служебная шина помечает сообщение как используемое, приложение начинает потреблять сообщения после перезапуска. Он пропускает сообщение о том, что он использовался до сбоя.

Блокировка быстрого редактирования

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

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

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

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

Разделы и подписки

Очередь позволяет обработать сообщение одному потребителю. В отличие от очередей, разделы и подписки служебной шины обеспечивают возможность связи "один ко многим" в рамках схемы публикации и подписки. Это полезно, когда требуется масштабирование на большое число получателей. Каждое опубликованное сообщение становится доступным по каждой зарегистрированной подписке на соответствующий раздел. Издатель отправляет сообщение в раздел, а один или несколько подписчиков получают копию сообщения.

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

Функциональности отправки сообщений из очереди соответствует раздел, а функциональности их приема из очереди — подписка. Помимо прочего, эта возможность означает, что подписки также поддерживают схемы для очередей, описанные ранее в этом разделе, в том числе конкуренцию потребителей, временное разделение, а также выравнивание и балансировку нагрузки.

Правила и действия

Во многих ситуациях сообщения с определенными характеристиками должны обрабатываться разными способами. Для этого можно настроить подписки, обеспечивающие поиск сообщений с нужными свойствами, после чего можно определенным образом изменить эти свойства. Подписки служебной шины регистрируют все сообщения, отправленные в раздел, однако в виртуальную очередь подписки можно скопировать только подмножество этих сообщений. Это возможно благодаря использованию фильтров подписок. Такие изменения называются действиями фильтров. При создании подписки можно задать выражение фильтра, которое работает со свойствами сообщения. Это могут быть как системные свойства (например, Метка), так и настраиваемые свойства приложения (например, StoreName). В этом случае выражение фильтра SQL задавать необязательно. Без выражения фильтра SQL все действия фильтра, определенные в подписке, выполняются во всех сообщениях для этой подписки.