路由

适用于:SQL ServerAzure SQL 托管实例

Service Broker 使用路由来确定向何处传递消息。 当服务在会话中发送消息时,SQL Server 使用路由来确定将接收该消息的服务。 当该服务响应时,SQL Server 再次使用路由来确定发出消息的服务。 默认情况下,每个数据库都包含一个路由,该路由指定没有显式路由的任何服务的消息都在 SQL Server 实例中传递。

路由由三个基本组成成分组成:

  • Service name
    该路由指定为其寻址的服务的名称。 此名称必须完全匹配 BEGIN DIALOG 命令中的服务名称。

  • Broker instance identifier
    要将消息发送到的特定数据库的唯一标识符。 这是此路由指向的数据库的 sys.databases 表行中的 service_broker_guid 列。

  • 网络地址
    它是实际的计算机地址,或者是将路由限制到本地计算机的关键字,或者是指示传输层从服务名称推导出地址的关键字。 网络地址可以是服务宿主 Broker 的地址,也可以是转发 Broker 的地址。

在确定会话路由时,SQL Server 将 BEGIN DIALOG CONVERSATION 语句中指定的服务名称和 Broker 实例标识符与路由中指定的服务名称和 Broker 实例标识符进行匹配。 没有提供服务名称的路由与所有服务名称匹配。 没有提供 Broker 实例标识符的路由与所有 Broker 实例标识符匹配。 当多个路由匹配会话时,SQL Server 选择其一,详细信息请参阅 Service Broker 路由

SQL Server 保证一旦目标确认第一个消息之后,该会话中的所有后续消息都会被路由到同一数据库中。 但是,不保证同一会话组中的其他会话也路由到同一数据库中。 如果应用程序要求相关会话中的消息都路由到同一数据库中,则该应用程序必须在发起会话时提供 Broker 实例标识符。

默认情况下,每个用户数据库都包含路由 AutoCreatedLocal。 此路由匹配任何的服务名称和 Broker 实例,并指定消息应在当前实例中传递。 对于会话的发起方和目标在同一 SQL Server 实例中的简单情况而言,无需其他路由。 然而,为每个服务创建一个路由有助于保护 AutoCreatedLocal 路由,使其不会被修改或删除。

另请参阅