Service Broker 使用路由来确定向何处传递消息。 当服务在会话中发送消息时,SQL Server 使用路由来确定将接收该消息的服务。 当该服务响应时,SQL Server 再次使用路由来确定发出消息的服务。 默认情况下,每个数据库都包含一个路由,该路由指定在 SQL Server 实例中传递任何没有显式路由的服务的消息。
路由由三个基本组成成分组成:
服务名称
该路由指定为其寻址的服务的名称。 此名称必须与命令中的
BEGIN DIALOG服务名称完全匹配。Broker 实例标识符
要将消息发送到的特定数据库的唯一标识符。 这是
service_broker_guid此路由指向的数据库的sys.databases表行中的列。网络地址
它是实际的计算机地址,或者是将路由限制到本地计算机的关键字,或者是指示传输层从服务名称推导出地址的关键字。 网络地址可以是服务宿主 Broker 的地址,也可以是转发 Broker 的地址。
若要确定会话的路由,SQL Server 将匹配在语句中指定的 BEGIN DIALOG CONVERSATION 服务名称和中转站实例标识符,该标识符与路由中指定的服务名称和中转站实例标识符匹配。 不提供服务名称的路由与任何服务名称匹配。 不提供代理实例标识符的路由与任何代理实例标识符匹配。 当多个路由与会话匹配时,SQL Server 会选择一个路由,如 Service Broker 路由中所述。
SQL Server 保证一旦目标确认第一个消息之后,该会话中的所有后续消息都会被路由到同一数据库中。 但是,不保证同一会话组中的其他对话路由到同一数据库。 如果应用程序要求相关会话中的消息都路由到同一数据库中,则该应用程序必须在发起会话时提供 Broker 实例标识符。
默认情况下,每个用户数据库都包含路由 AutoCreatedLocal。 此路由匹配任何的服务名称和 Broker 实例,并指定消息应在当前实例中传递。 对于会话的发起方和目标在同一 SQL Server 实例中的简单情况而言,无需其他路由。 然而,为每个服务创建一个路由有助于保护 AutoCreatedLocal 路由,使其不会被修改或删除。