共用方式為


Service Broker 路由範例

適用於:SQL ServerAzure SQL 受控執行個體

此章節提供 Service Broker 路由處理的範例。 每個範例都會包含 AdventureWorks2008R2msdb 的範例路由表,並描述 Service Broker 如何使用這些路由表來選擇訊息的路由。

注意

這些範例已經過 SQL Server 2008 R2 (10.50.x) 的驗證。 建議使用 AdventureWorks 範例資料庫中的 AdventureWorks2008R2 範例資料庫來完成這些範例。

SQL Server 的目前版本支援 SQL Server Service Broker。

本主題中所提供的路由表為 sys.routes 目錄檢視的簡化版本。 對於路由處理而言,路由識別碼及擁有者並不重要,而且所有路由都會被視為具有無限的存留期。

remote_service_name 資料行中的 NULL 值與任何服務名稱相符。 broker_instance 資料行中的 NULL 值則與任何 Service Broker 識別碼相符。

外寄訊息的範例不會使用 msdb 中的路由表,而內送訊息和訊息轉寄的範例則不會使用 AdventureWorks2008R2 的路由表。

範例 1:預設組態

此範例描述 Service Broker 路由的預設組態。 根據預設,除 master 之外的所有資料庫都包含 AutoCreatedLocal 路由。 因此,AdventureWorks2008R2msdb 的路由表包含下列資訊。

AdventureWorks2008R2.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

在此案例中,在 AdventureWorks2008R2 資料庫中建立的所有對話都會傳遞至目前執行個體內的服務。 此外,從執行個體外部到達的所有對話也會傳遞至目前執行個體內的服務。

對於在 AdventureWorks2008R2 中建立的交談,AutoCreatedLocalAdventureWorks2008R2.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

對於從執行個體外部到達的交談而言,處理是相同的。 對於來自執行個體外部的交談,AutoCreatedLocalmsdb.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

範例 2:特定服務的網路路由

此範例描述目前執行個體外部之服務的典型路由組態。 若要設定外部服務的路由,請在開始交談的資料庫中建立路由。 在此範例中,AdventureWorks2008R2 包含 OrderParts 服務的路由。 該路由包含 OrderParts 服務的網路位址。

AdventureWorks2008R2.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

在此案例中,在 AdventureWorks2008R2 資料庫中針對 OrderParts 服務建立的所有對話都與 OrderPartsRoute 路由相符。 Service Broker 會將這些訊息傳送至網路位址 TCP://host2.Adventure-Works.com:4022/。 其他所有交談則會傳遞至相同執行個體內的服務。

對於在 AdventureWorks2008R2 中針對目標服務 OrderParts 建立的交談,相符路由集會包含 OrderPartsRoute,因為此路由與服務名稱完全相符。 OrderPartsRoute 是相符路由集中的唯一路由,因此 Service Broker 會選擇該路由。

對於在 AdventureWorks2008R2 中針對不同目標服務建立的交談,相符路由集會包含 AutoCreatedLocal。 由於這是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,Service Broker 則會將交談標示為 DELAYED。

對於來自執行個體外部的交談,AutoCreatedLocalmsdb.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

範例 3:鏡像資料庫的網路路由

此範例描述鏡像資料庫所裝載的在目前執行個體外部之服務的典型路由組態。 若要設定外部服務的路由,請在開始交談的資料庫中建立路由。 在此範例中,AdventureWorks2008R2 包含 OrderParts 服務的路由。 該路由同時包含 OrderParts 服務的網路位址和鏡像位址。

AdventureWorks2008R2.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

對於在 AdventureWorks2008R2 中針對目標服務 OrderParts 建立的交談,相符路由集會包含 OrderPartsRoute,因為此路由與服務名稱完全相符。 OrderPartsRoute 是相符路由集中的唯一路由,因此 Service Broker 會選擇該路由。 Service Broker 會同時檢查此位址和鏡像位址以判斷哪個夥伴為主體,然後將訊息傳送至該主體。

對於在 AdventureWorks2008R2 中針對不同目標服務建立的交談,相符路由集會包含 AutoCreatedLocal。 由於這是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,Service Broker 則會將交談標示為 DELAYED。

對於來自執行個體外部的交談,AutoCreatedLocalmsdb.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

範例 4:所有外部服務的網路路由

此範例會將來自 AdventureWorks2008R2 中服務的訊息傳送至不同的執行個體,除非該服務存在於本機執行個體中。 請注意,不在本機執行個體之任何服務的訊息會移至相同的網路位址。 如果位於該網路位址的 SQL Server 執行個體執行訊息轉寄,這個組態可能會很有幫助。

在此範例中,AdventureWorks2008R2 資料庫包含 AutoCreatedLocal 路由以及 TCP://forwarding.Adventure-Works.com:4022/ 位址的路由。

AdventureWorks2008R2.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

對於在 AdventureWorks2008R2 中建立的交談,相符路由集會同時包含 AutoCreatedLocalExternalRoute,因為對於這兩個路由而言,遠端服務名稱和 Broker 執行個體是相同的。 Service Broker 必須在這兩個路由之間進行選擇。 Service Broker 會選擇在指定網路位址之路由前含有 'LOCAL' 位址的路由,因此 Service Broker 首先選擇 AutoCreatedLocal。 如果目標服務存在於本機執行個體中,則 Service Broker 會使用這個路由並且將訊息傳遞給該服務。 不過,如果目標服務不存在於本機執行個體中,則 Service Broker 會選擇 ExternalRoute

對於來自執行個體外部的交談,AutoCreatedLocalmsdb.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

範例 5:服務之不同執行個體的網路路由

此範例顯示兩個不同網路位址裝載相同服務之不同執行個體的路由組態。 此組態可能對負載平衡組態很有用。

在此範例中,AdventureWorks2008R2 資料庫包含 AutoCreatedLocal 路由以及 BalancedService 服務的路由。

AdventureWorks2008R2.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

對於在 AdventureWorks2008R2 資料庫中針對 BalancedService 服務建立的交談,若未指定 Service Broker 識別碼,則相符路由集會包含 BalancedRouteOneBalancedRouteTwo。 由於路由包含不同的 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。

對於來自執行個體外部的交談,AutoCreatedLocalmsdb.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

範例 6:特定服務的訊息轉送

此範例會將來自本機執行個體外部的訊息轉寄至 ElsewhereService 服務,再轉寄至網路位址 TCP://elsewhere.Adventure-Works.com:4022/。 對於所有其他服務,Service Broker 會將訊息傳遞至本機執行個體中的服務,或者,如果服務不存在於本機執行個體中,則將交談標示為 DELAYED。

AdventureWorks2008R2.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

對於在 AdventureWorks2008R2 中建立的交談,AutoCreatedLocalAdventureWorks2008R2.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,Service Broker 則會將交談標示為 DELAYED。 請注意,在 AdventureWorks2008R2 中針對 ElsewhereService 服務建立的交談不會路由傳送至 TCP://elsewhere.Adventure-Works.com:4022/

對於來自執行個體外部且目標為 ElsewhereService 服務的交談,ForwardingRoute 路由與服務名稱完全相符。 因此,ForwardingRoute 是相符路由集中的唯一路由,而且當訊息轉寄為開啟時,Service Broker 會選擇該路由。 即使本機執行個體包含 ElsewhereService 服務,Service Broker 仍會選擇此路由。 如果訊息轉送處於關閉狀態,Service Broker 則會卸除訊息。

對於來自執行個體外部且目標為其他所有服務的交談,AutoCreatedLocalmsdb.sys.routes 中的唯一相符路由。 Service Broker 會選擇該路由。 如果訊息的服務不存在於本機執行個體中,則會卸除此訊息。

範例 7:不在執行個體內之所有服務的訊息轉送

此範例會將訊息從本機執行個體外部傳送至不同的執行個體,除非服務存在於本機執行個體中。 請注意,所有外部服務的訊息會移至相同的網路位址。 此組態也許對訊息轉送很有用。

AdventureWorks2008R2.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

對於在 AdventureWorks2008R2 中建立的交談,AutoCreatedLocalAdventureWorks2008R2.sys.routes 中的唯一路由。 該路由是相符路由集合中的唯一路由,因此 Service Broker 會選擇它。 如果訊息的服務不存在於本機執行個體中,Service Broker 則會將交談標示為 DELAYED。

對於來自資料庫外部的交談,相符路由集會同時包含 AutoCreatedLocalForwardingRoute,因為這兩個路由會指定相同的遠端服務名稱和 Service Broker 識別碼。 Service Broker 必須在這兩個路由之間進行選擇。 Service Broker 會選擇在指定網路位址之路由前含有 'LOCAL' 位址的路由,因此 Service Broker 首先選擇 AutoCreatedLocal。 如果目標服務存在於本機執行個體中,則 Service Broker 會使用這個路由並且將訊息傳遞給該服務。 不過,如果目標服務不存在於本機執行個體中,而且訊息轉寄為開啟,則 Service Broker 會選擇 ForwardingRoute。 如果訊息轉送未處於開啟狀態,則當目標服務不存在於本機執行個體中時,Service Broker 會卸除訊息。

另請參閱