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


Примеры маршрутизации для компонента Service Broker

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

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

Значение NULL в столбце remote_service_name соответствует любому имени службы. Значение NULL в столбце broker_instance соответствует любому идентификатору экземпляра компонента Service Broker.

Примеры исходящих сообщений не используют таблицу маршрутизации для базы данных msdb, а примеры входящих сообщений и переадресации сообщений не используют таблицу маршрутизации для базы данных AdventureWorks.

Пример 1. Настройки по умолчанию

В этом примере описана конфигурация маршрутизации компонента Service Broker по умолчанию. По умолчанию все базы данных, кроме master, содержат маршрут AutoCreatedLocal. Поэтому таблицы маршрутизации для баз данных AdventureWorks и msdb содержат следующие данные.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

В этом случае все диалоги, созданные в базе данных AdventureWorks, доставляются службе в текущем экземпляре. Кроме того, все диалоги, приходящие извне экземпляра, доставляются службе в текущем экземпляре.

Для диалогов, созданных в базе данных AdventureWorks, AutoCreatedLocal — единственный маршрут к службе AdventureWorks.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

Тот же процесс используется для диалогов, приходящих извне экземпляра. Для диалогов, приходящих извне данного экземпляра, AutoCreatedLocal является единственным маршрутом в представлении msdb.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

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

В этом примере описана типичная конфигурация маршрута для служб, находящихся за пределами текущего экземпляра. Для настройки маршрута к внешней службе создайте маршрут в базе данных, которая начинает диалог. В данном примере база данных AdventureWorks содержит маршрут для службы OrderParts. Маршрут содержит сетевой адрес службы OrderParts.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://host2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

В этом случае все диалоги, созданные в базе данных AdventureWorks для службы OrderParts, соответствуют маршруту OrderPartsRoute. Компонент Service Broker отправляет эти сообщения по сетевому адресу tcp://host2.Adventure-Works.com:4022/. Все другие диалоги доставляются службам в том же экземпляре.

Для диалогов, созданных в базе данных AdventureWorks с целевой службой OrderParts, набор совпадающих маршрутов содержит OrderPartsRoute, поскольку этот маршрут в точности совпадает с названием службы. OrderPartsRoute является единственным маршрутом в наборе совпадающих маршрутов, и поэтому компонент Service Broker выбирает его.

Для диалогов, созданных в базе данных AdventureWorks для других целевых служб, набор совпадающих маршрутов содержит AutoCreatedLocal. Поскольку это единственный маршрут в наборе совпадающих маршрутов, его и выбирает компонент Service Broker. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, компонент Service Broker помечает диалог как DELAYED.

Для диалогов, приходящих извне данного экземпляра, AutoCreatedLocal является единственным маршрутом в представлении msdb.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

Пример 3. Сетевой маршрут к зеркальной базе данных

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

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://partner1.Adventure-Works.com:4022/

tcp://partner2.Adventure-Works.com:4022/

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Для диалогов, созданных в базе данных AdventureWorks с целевой службой OrderParts, набор совпадающих маршрутов содержит OrderPartsRoute, поскольку этот маршрут в точности совпадает с названием службы. OrderPartsRoute является единственным маршрутом в наборе совпадающих маршрутов, и поэтому компонент Service Broker выбирает его. Компонент Service Broker проверяет как сетевой, так и зеркальный адрес, чтобы определить, какой партнер является участником, и отправляет ему сообщение.

Для диалогов, созданных в базе данных AdventureWorks для других целевых служб, набор совпадающих маршрутов содержит AutoCreatedLocal. Поскольку это единственный маршрут в наборе совпадающих маршрутов, его и выбирает компонент Service Broker. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, компонент Service Broker помечает диалог как DELAYED.

Для диалогов, приходящих извне данного экземпляра, AutoCreatedLocal является единственным маршрутом в представлении msdb.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

Пример 4. Сетевой маршрут ко всем внешним службам

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

В этом примере база данных AdventureWorks содержит маршрут AutoCreatedLocal, а также маршрут к адресу tcp://.Adventure-Works.com:4022/.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ExternalRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Для диалогов, созданных в базе данных AdventureWorks, набор совпадающих маршрутов содержит как AutoCreatedLocal, так и ExternalRoute, поскольку имя удаленной службы и экземпляр компонента Service Broker одинаковы для обоих маршрутов. Компонент Service Broker должен выбрать один из этих маршрутов. Компонент Service Broker выбирает маршруты с адресом 'LOCAL' раньше, чем маршруты, указывающие сетевой адрес, поэтому первым будет выбран маршрут AutoCreatedLocal. Если целевая служба существует на локальном экземпляре, компонент Service Broker использует этот маршрут и доставляет сообщение службе. Однако если целевой службы не существует на локальном экземпляре, то компонент Service Broker выбирает маршрут ExternalRoute.

Для диалогов, приходящих извне данного экземпляра, AutoCreatedLocal является единственным маршрутом в представлении msdb.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

Пример 5. Сетевой маршрут к различным экземплярам службы

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

В этом примере база данных AdventureWorks содержит маршрут AutoCreatedLocal, а также маршруты к службе BalancedService.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

BalancedRouteOne

BalancedService

5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d

tcp://server1.Adventure-Works.com:4022/

NULL

BalancedRouteTwo

BalancedService

81b1d3d0-288e-4d2c-b1d3-456cbb944b4f

tcp://server2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Для диалогов, созданных в базе данных AdventureWorks для службы BalancedService, которая не указывает идентификатор экземпляра компонента Service Broker, набор совпадающих маршрутов содержит как маршрут BalancedRouteOne, так и BalancedRouteTwo. Поскольку эти маршруты содержат разные идентификаторы экземпляра компонента Service Broker, идентификатор компонента Service Broker и совпадающий с ним маршрут выбираются произвольно. Поскольку совпадает только один маршрут, компонент Service Broker выбирает его для диалога. В результате некоторые диалоги направляются по маршруту tcp://server1.Adventure-Works.com:4022/, а другие — по маршруту tcp://server2.Adventure-Works.com:4022/. Однако когда компонент Service Broker получает подтверждение приема для сообщения в диалоге, он использует идентификатор экземпляра компонента Service Broker, содержащийся в подтверждении приема, для других сообщений в диалоге. Как только было получено первое подтверждение приема, все последующие сообщения в диалоге направляются по маршруту, использующему идентификатор экземпляра компонента Service Broker, который содержался в подтверждении приема.

Для диалогов, созданных в базе данных AdventureWorks для службы BalancedService, которая указывает один из идентификаторов компонента Service Broker в таблице маршрутизации, набор совпадающих маршрутов содержит маршрут, совпадающий с идентификатором экземпляра компонента Service Broker. Диалог направляется по адресу, содержащемуся в маршруте с этим идентификатором экземпляра компонента Service Broker.

Для диалогов, созданных в базе данных AdventureWorks для других целевых служб, набор совпадающих маршрутов содержит только маршрут AutoCreatedLocal. Компонент Service Broker выбирает этот маршрут. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, компонент Service Broker помечает диалог как DELAYED.

Для диалогов, приходящих извне данного экземпляра, AutoCreatedLocal является единственным маршрутом в представлении msdb.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

Пример 6. Пересылка сообщений для определенной службы

В этом примере сообщения извне локального экземпляра переадресуются службе ElsewhereService по сетевому адресу tcp://elsewhere.Adventure-Works.com:4022/. Для всех других служб компонент Service Broker доставляет сообщения службе на локальном экземпляре или помечает диалог как DELAYED, если ее не существует на локальном экземпляре.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

ElsewhereService

NULL

tcp://elsewhere.Adventure-Works.com:4022/

NULL

Для диалогов, созданных в базе данных AdventureWorks, маршрут AutoCreatedLocal — единственный маршрут к службе AdventureWorks.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, компонент Service Broker помечает диалог как DELAYED. Обратите внимание на то, что диалог, созданный в базе данных AdventureWorks для службы ElsewhereService, не направляется по маршруту tcp://elsewhere.Adventure-Works.com:4022/.

Для диалогов, приходящих извне экземпляра к службе ElsewhereService, маршрут ForwardingRoute точно соответствует имени службы. Поэтому маршрут ForwardingRoute — единственный в наборе совпадающих маршрутов, и компонент Service Broker выбирает его, если включена пересылка сообщений. Компонент Service Broker выбирает этот маршрут, даже если локальный экземпляр содержит службу ElsewhereService. Если пересылка сообщений отключена, компонент Service Broker удаляет сообщение.

Для диалогов, приходящих извне данного экземпляра для всех других служб, AutoCreatedLocal является единственным совпадающим маршрутом в представлении msdb.sys.routes. Компонент Service Broker выбирает этот маршрут. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, сообщение удаляется.

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

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

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

Для диалогов, созданных в базе данных AdventureWorks, маршрут AutoCreatedLocal — единственный маршрут к службе AdventureWorks.sys.routes. Это единственный маршрут в наборе совпадающих маршрутов, поэтому компонент Service Broker выбирает его. Если службы, которой адресовано сообщение, не существует на локальном экземпляре, компонент Service Broker помечает диалог как DELAYED.

Для диалогов, приходящих извне базы данных, набор совпадающих маршрутов содержит как AutoCreatedLocal, так и ForwardingRoute, поскольку в обоих маршрутах указывается одно и то же имя удаленной службы и идентификатор экземпляра компонента Service Broker. Компонент Service Broker должен выбрать один из этих маршрутов. Компонент Service Broker выбирает маршруты с адресом 'LOCAL' раньше, чем маршруты, указывающие сетевой адрес, поэтому первым будет выбран маршрут AutoCreatedLocal. Если целевая служба существует на локальном экземпляре, компонент Service Broker использует этот маршрут и доставляет сообщение службе. Однако если целевой службы на локальном экземпляре не существует, а пересылка сообщений включена, компонент Service Broker выбирает маршрут ForwardingRoute. При невключенной переадресации сообщений компонент Service Broker удаляет сообщение, если целевой службы не существует на локальном экземпляре.