Share via


Service Broker 訊息轉送

Service Broker 訊息轉送允許 SQL Server 的執行個體接受來自執行個體以外的訊息,並將這些訊息傳送至其他執行個體。

管理員可使用訊息轉送執行下列動作:

  • 提供不同信任網域中伺服器之間的連接

  • 簡化管理,方法是建立會保留網域之路由資訊的單一集中式執行個體

  • 在數個執行個體中散發工作

當啟用轉送時,msdb.sys.routes 中的路由表會決定是否轉送來自其他執行個體的訊息。如果相符路由的位址不是 LOCAL,則 SQL Server 會將訊息轉送至指定的位址。否則,會在本機傳遞訊息。

每個 Service Broker 訊息都包含最大存留時間和訊息已轉送的次數計數。當執行個體轉送訊息時,該執行個體會增加訊息中的計數。如果訊息超出最大存留時間,則轉送執行個體會捨棄該訊息。此策略有助於避免可能存在路由迴圈時的問題。

轉送和可靠傳遞

轉送訊息的執行個體不會對傳送者確認訊息。只有最終目的地才會確認訊息。如果傳送者在一段時間後未接收到目的地的收條,則傳送者會重試訊息。

執行訊息轉送的執行個體無需儲存轉送的訊息。相反,SQL Server 會在記憶體中保留要轉送的訊息。訊息轉送可用的記憶體數量會指定為 Service Broker 端點組態的一部份。此策略可允許有效的、無狀態的訊息轉送。在執行訊息轉送之執行個體失敗的事件中,訊息也不會遺失。每個訊息始終由傳送者維護,直到最終目的地確認訊息為止,如<Service Broker 通訊協定>中所述。

管理檢視 sys.dm_broker_forwarded_messages 會包含有關執行個體目前正在轉送之訊息的資訊。執行個體不會保存轉送中的訊息;這些訊息僅存在於記憶體中。傳送訊息的執行個體和接收訊息的執行個體會保存訊息。傳送執行個體不會移除訊息,直到接收執行個體確認收到訊息為止。

安全性和轉送

Service Broker 訊息轉送不需要轉送執行個體來解密轉送的訊息。因此,僅參與交談的資料庫才必須設定對話安全性。

然而,因為傳輸安全性會套用至 SQL Server 執行個體之間的連接,所以每個 SQL Server 執行個體都必須為其與之直接通訊的執行個體正確設定傳輸安全性。例如,如果執行個體 A 和執行個體 B 透過轉送執行個體進行通訊,則執行個體 A 和執行個體 B 都必須為轉送執行個體正確設定傳輸安全性。因為執行個體不直接交換訊息,所以執行個體不應設定傳輸安全性來與彼此進行通訊。