Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server Управляемый экземпляр SQL Azure
В этом разделе приведены примеры процесса маршрутизации Service Broker. Каждый пример содержит примеры таблиц маршрутизации для AdventureWorks2008R2 и msdbописывает, как Service Broker использует эти таблицы маршрутизации для выбора маршрута для сообщения.
Примечание.
Примеры кода в этой статье были протестированы с помощью примера базы данных AdventureWorks2025, которую можно скачать с домашней страницы примеров Microsoft SQL Server и проектов сообщества.
Таблицы маршрутизации, представленные в этом разделе, являются упрощенными версиями sys.routes представления каталога. Идентификатор маршрута и владелец не имеют значения для процесса маршрутизации, и все маршруты считаются с бессрочным существованием.
Значение NULL в столбце remote_service_name соответствует любому имени службы. Значение NULL в столбце соответствует любому идентификатору broker_instance Service Broker.
Примеры исходящих сообщений не используют таблицу msdbмаршрутизации, а примеры для входящих сообщений и перенаправления сообщений не используют таблицу маршрутизации.AdventureWorks2008R2
Пример 1. Конфигурация по умолчанию
В этом примере описывается конфигурация по умолчанию для маршрутизации Service Broker. По умолчанию все базы данных, кроме master, содержат AutoCreatedLocal маршрута. Таким образом, таблицы маршрутизации для AdventureWorks2008R2 и msdb содержат следующие сведения.
| колонна | AdventureWorks2008R2 | msdb |
|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
remote_service_name |
NULL |
NULL |
broker_instance |
NULL |
NULL |
address |
LOCAL |
LOCAL |
mirror_address |
NULL |
NULL |
В этом случае все диалоги, созданные в AdventureWorks2008R2 базе данных, доставляются в службу в текущем экземпляре. Кроме того, все диалоги, поступающие извне экземпляра, доставляются в службу в текущем экземпляре.
Для бесед, созданных в AdventureWorks2008R2, AutoCreatedLocal является единственным маршрутом в AdventureWorks2008R2.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Процесс совпадает с беседами, поступающими извне экземпляра. Для разговоров, поступающих извне экземпляра, AutoCreatedLocal — это единственный маршрут в msdb.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Пример 2. Сетевой маршрут к определенной службе
В этом примере описывается типичная конфигурация маршрутизации для служб за пределами текущего экземпляра. Чтобы настроить маршрут во внешнюю службу, создайте маршрут в базе данных, которая начинает беседу. В этом примере AdventureWorks2008R2 содержится маршрут для службы OrderParts. Маршрут содержит сетевой адрес службы OrderParts .
| колонна | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
OrderPartsRoute |
AutoCreatedLocal |
remote_service_name |
NULL |
OrderParts |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
TCP://host2.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
NULL |
NULL |
В этом случае все диалоги, созданные в базе данных AdventureWorks2008R2, соответствуют сервису OrderParts и маршруту OrderPartsRoute. Service Broker отправляет эти сообщения в сетевой адрес TCP://host2.Adventure-Works.com:4022/. Все остальные беседы доставляются службам в одном экземпляре.
Для бесед, созданных в AdventureWorks2008R2 с целевой службой OrderParts, в набор соответствующих маршрутов входит OrderPartsRoute, потому что этот маршрут точно соответствует имени службы.
OrderPartsRoute — единственный маршрут в наборе соответствующих маршрутов, поэтому Компонент Service Broker выбирает этот маршрут.
Для бесед, созданных в AdventureWorks2008R2 и предназначенных для другой целевой службы, набор соответствующих маршрутов содержит AutoCreatedLocal. Так как это единственный маршрут в наборе соответствующих маршрутов, компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, Service Broker отмечает диалог DELAYED.
Для разговоров, поступающих извне экземпляра, AutoCreatedLocal — это единственный маршрут в msdb.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Пример 3. Сетевой маршрут к зеркальной базе данных
В этом примере описывается типичная конфигурация маршрутизации для службы, размещенной зеркальной базой данных за пределами текущего экземпляра. Чтобы настроить маршрут во внешнюю службу, создайте маршрут в базе данных, которая начинает беседу. В этом примере AdventureWorks2008R2 содержится маршрут для службы OrderParts. Маршрут содержит как сетевой адрес, так и зеркальный адрес службы OrderParts .
| колонна | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
OrderPartsRoute |
AutoCreatedLocal |
remote_service_name |
NULL |
OrderParts |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
TCP://partner1.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
TCP://partner2.Adventure-Works.com:4022/ |
NULL |
Для бесед, созданных в AdventureWorks2008R2 с целевой службой OrderParts, в набор соответствующих маршрутов входит OrderPartsRoute, потому что этот маршрут точно соответствует имени службы.
OrderPartsRoute — единственный маршрут в наборе соответствующих маршрутов, поэтому Компонент Service Broker выбирает этот маршрут. Service Broker проверяет как адрес, так и зеркальный адрес, чтобы определить, какой партнер является субъектом, а затем отправляет сообщение субъекту.
Для бесед, созданных в AdventureWorks2008R2 и предназначенных для другой целевой службы, набор соответствующих маршрутов содержит AutoCreatedLocal. Так как это единственный маршрут в наборе соответствующих маршрутов, компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, Service Broker отмечает диалог DELAYED.
Для разговоров, поступающих извне экземпляра, AutoCreatedLocal — это единственный маршрут в msdb.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Пример 4. Сетевой маршрут ко всем внешним службам
В этом примере сообщения из служб отправляются в другой экземпляр AdventureWorks2008R2, если такая служба не существует в локальном экземпляре. Сообщения для любых служб, которые не находятся в локальном экземпляре, отправляются по тому же сетевому адресу. Эта конфигурация может оказаться полезной, если экземпляр SQL Server на этом сетевом адресе выполняет пересылку сообщений.
В этом примере AdventureWorks2008R2 база данных содержит AutoCreatedLocal маршрут, а также маршрут к адресу TCP://forwarding.Adventure-Works.com:4022/.
| колонна | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
ExternalRoute |
AutoCreatedLocal |
remote_service_name |
NULL |
NULL |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
TCP://forwarding.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
NULL |
NULL |
Для бесед, созданных в AdventureWorks2008R2, набор соответствующих маршрутов содержит как AutoCreatedLocal, так и ExternalRoute, поскольку имя удаленной службы и экземпляр брокера одинаковы для этих маршрутов. Компонент Service Broker должен выбрать между этими двумя маршрутами. Service Broker выбирает маршруты с адресом 'LOCAL' перед маршрутами, которые указывают сетевой адрес, поэтому Service Broker сначала выбирает AutoCreatedLocal. Если целевая служба существует в локальном экземпляре, компонент Service Broker использует этот маршрут и передает сообщение этой службе. Однако если требуемая служба не существует в локальном экземпляре, компонент Service Broker выбирает ExternalRoute.
Для разговоров, поступающих извне экземпляра, AutoCreatedLocal — это единственный маршрут в msdb.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Пример 5. Сетевой маршрут к разным экземплярам сервиса
В этом примере показана конфигурация маршрутизации, в которой два разных сетевых адреса размещают разные экземпляры одной службы. Эта конфигурация может быть полезна для конфигурации балансировки нагрузки.
В этом примере база данных AdventureWorks2008R2 содержит маршрут AutoCreatedLocal, а также маршруты к сервису BalancedService.
| колонна | AdventureWorks2008R2 | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|---|
name |
AutoCreatedLocal |
BalancedRouteOne |
BalancedRouteTwo |
AutoCreatedLocal |
remote_service_name |
NULL |
BalancedService |
BalancedService |
NULL |
broker_instance |
NULL |
5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d |
81b1d3d0-288e-4d2c-b1d3-456cbb944b4f |
NULL |
address |
LOCAL |
TCP://server1.Adventure-Works.com:4022/ |
TCP://server2.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
NULL |
NULL |
NULL |
Для бесед, созданных в базе данных AdventureWorks2008R2 для службы 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, содержащийся в подтверждении приема сообщения. После получения первого подтверждения все последующие сообщения диалога направляются по маршруту с использованием идентификатора экземпляра компонента Service Broker, содержащегося в подтверждении.
Для диалогов, созданных в базе данных AdventureWorks2008R2 для службы BalancedService, которые указывают один из идентификаторов Service Broker в таблице маршрутизации, соответствующий набор маршрутов содержит маршрут, совпадающий с идентификатором Service Broker. Беседа направляется к адресу в маршруте с этим идентификатором Service Broker.
Для бесед, созданных в AdventureWorks2008R2 для другой целевой службы, набор соответствующих маршрутов содержит только AutoCreatedLocal. Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, Service Broker отмечает диалог DELAYED.
Для разговоров, поступающих извне экземпляра, AutoCreatedLocal — это единственный маршрут в msdb.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Пример 6. Пересылка сообщений для определенной службы
Этот пример перенаправит сообщения извне локального экземпляра в службу ElsewhereService по сетевому адресу TCP://elsewhere.Adventure-Works.com:4022/. Для всех других служб Service Broker отправляет сообщения в службу в локальной инстанции или помечает беседу DELAYED, если служба не существует в локальной инстанции.
| колонна | AdventureWorks2008R2 | msdb | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
ForwardingRoute |
remote_service_name |
NULL |
NULL |
ElsewhereService |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
LOCAL |
TCP://elsewhere.Adventure-Works.com:4022/ |
mirror_address |
NULL |
NULL |
NULL |
Для бесед, созданных в AdventureWorks2008R2, AutoCreatedLocal является единственным маршрутом в AdventureWorks2008R2.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, Service Broker отмечает диалог DELAYED. Беседа, созданная в AdventureWorks2008R2 службе ElsewhereService , не направляется в TCP://elsewhere.Adventure-Works.com:4022/.
Для сообщений, поступающих извне экземпляра в сервис ElsewhereService, маршрут ForwardingRoute точно соответствует названию сервиса. Таким образом, ForwardingRoute это единственный маршрут в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут при переадресации сообщений. Service Broker выбирает этот маршрут, даже если локальный экземпляр содержит службу ElsewhereService. Если пересылка сообщений отключена, компонент Service Broker удаляет сообщение.
Для бесед, поступающих извне экземпляра ко всем другим службам, AutoCreatedLocal является единственным соответствующим маршрутом.msdb.sys.routes Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, оно удаляется.
Пример 7. Пересылка сообщений для всех служб, не входящих в данный экземпляр
В этом примере сообщения отправляются извне локального экземпляра в другой экземпляр, если служба не существует в локальном экземпляре. Сообщения для всех внешних служб отправляются по одному сетевому адресу. Эта конфигурация может быть полезна для пересылки сообщений.
| колонна | AdventureWorks2008R2 | msdb | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
ForwardingRoute |
remote_service_name |
NULL |
NULL |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
LOCAL |
TCP://forwarding.Adventure-Works.com:4022/ |
mirror_address |
NULL |
NULL |
NULL |
Для бесед, созданных в AdventureWorks2008R2, AutoCreatedLocal является единственным маршрутом в AdventureWorks2008R2.sys.routes. Этот маршрут является единственным маршрутом в наборе соответствующих маршрутов, а компонент Service Broker выбирает этот маршрут. Если служба для сообщения не существует в локальном экземпляре, Service Broker отмечает диалог DELAYED.
Для бесед, поступающих из-за пределов базы данных, набор соответствующих маршрутов содержит как AutoCreatedLocal, так и ForwardingRoute, так как оба маршрута указывают одинаковое имя удаленной службы и идентификатор Service Broker. Компонент Service Broker должен выбрать между этими двумя маршрутами. Service Broker выбирает маршруты с адресом 'LOCAL' перед маршрутами, которые указывают сетевой адрес, поэтому Service Broker сначала выбирает AutoCreatedLocal. Если целевая служба существует в локальном экземпляре, компонент Service Broker использует этот маршрут и передает сообщение этой службе. Однако если целевая служба не существует в локальном экземпляре и переадресация сообщений включена, служба Service Broker выбирает ForwardingRoute. Если пересылка сообщений не включена, компонент Service Broker удаляет сообщение, если целевая служба не существует в локальном экземпляре.