路由

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

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

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

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

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

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

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

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