路由

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

Service Broker 會使用路由來決定傳遞訊息的目的地。 當服務在交談中傳送訊息時,SQL Server 會使用路由找出要接收此訊息的服務。 當該服務回應時,SQL Server 會再次使用路由找出起始服務。 依預設,每個資料庫都包含一個指定下列事項的路由:如果訊息相關的任何服務並沒有明確路由,則這類訊息會在 SQL Server 執行個體內傳遞。

路由有三個基本元件:

  • 服務名稱
    此路由為其指定位址之服務的名稱。 此名稱必須與 BEGIN DIALOG 命令中的服務名稱完全相符。

  • Broker 執行個體識別碼
    要將訊息傳送過去之特定資料庫的唯一識別碼。 這是此路由所指向資料庫 sys.databases 資料表資料列中的 service_broker_guid 資料行。

  • 網路位址
    實際電腦位址、將路由限制至本機電腦的關鍵字,或指示傳輸層從服務名稱推算位址的關鍵字。 網路位址可以是裝載服務之 Broker 的位址,或是轉送 Broker 的位址。

為了確定交談的路由,SQL Server 會將下列項目中指定的服務名稱和 Broker 執行個體識別碼進行比對:BEGIN DIALOG CONVERSATION 陳述式和路由。 未提供服務名稱的路由可與任何服務名稱相符。 未提供 Broker 執行個體識別碼的路由可與任何 Broker 執行個體識別碼相符。 當多個路由符合交談時,SQL Server 會按 Service Broker 路由中所述的方式來選取路由。

SQL Server 可保證一旦目標確認第一則訊息,該交談上的所有後續訊息都會路由至相同的資料庫。 不過,相同交談群組上的其他交談不會保證也會路由至相同的資料庫。 如果應用程式需要相關交談上的訊息路由至相同的資料庫,則應用程式必須在開始交談時提供 Broker 執行個體識別碼。

依預設,每個使用者資料庫都包含 AutoCreatedLocal 路由。 此路由會比對所有服務名稱和 Broker 執行個體,並指定訊息應在目前執行個體內傳遞。 如果交談的起始端和目標都存在於相同 SQL Server 執行個體中,這類簡單狀況就不需要其他路由。 不過,為每個服務建立路由有助於防止 AutoCreatedLocal 路由遭修改或捨棄。

另請參閱