Маршруты

Область применения: SQL Server Управляемый экземпляр SQL Azure

Service Broker использует маршруты для определения места доставки сообщений. Когда служба в ходе диалога отправляет сообщение, SQL Server определяет по маршрутам службу, которая получит это сообщение. Когда служба-адресат отвечает на сообщение, SQL Server снова анализирует маршруты для идентификации службы, инициировавшей взаимодействие. По умолчанию каждая база данных содержит маршрут, указывающий, что сообщения для любой службы, у которой нет явного маршрута, доставляются в экземпляре SQL Server.

Существует три основных компонента маршрута:

  • Имя службы

    Имя службы, для которую указывает этот маршрут. Это имя должно совпадать с именем службы в команде BEGIN DIALOG .

  • Идентификатор экземпляра брокера

    Уникальный идентификатор определенной базы данных для отправки сообщений. service_broker_guid Это столбец в строке sys.databases таблицы для базы данных, на которую указывает этот маршрут.

  • Сетевой адрес

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

Чтобы определить маршрут для беседы, SQL Server соответствует имени службы и идентификатору экземпляра брокера, указанным в BEGIN DIALOG CONVERSATION инструкции, с идентификатором экземпляра службы и экземпляра брокера, указанным в маршруте. Маршруты, которые не предоставляют имя службы, соответствуют имени службы. Маршруты, которые не предоставляют идентификатор экземпляра брокера, соответствуют любому идентификатору экземпляра брокера. Если несколько маршрутов совпадают с беседой, SQL Server выбирает маршрут, как описано в маршрутизации Service Broker.

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

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