Service Broker 应用程序

Service Broker 应用程序由一个或多个程序和这些程序所使用的数据库对象组成。应用程序通过在称为服务的各个独立组件间创建会话,然后在这些会话内交换消息来实现通信。应用程序通过在 SQL Server 数据库中执行 Transact-SQL 语句来使用 Service Broker。

应用程序组件

Service Broker 应用程序由以下部分组成:

  • 实现一个任务或一组相关任务的一个或多个“程序”。在 SQL Server 外部,可以将应用程序写入可在 SQL Server 中运行 Transact-SQL 语句的任何编程环境。在 SQL Server 内部,可以使用 Transact-SQL 语言或符合公共语言运行时 (CLR) 的语言将应用程序编写为存储过程。

  • 一个向其他服务公开任务的“服务”。服务是为一组相关任务提供可寻址名称的 Service Broker 对象。其他服务启动与此服务的会话来执行任务。

  • 一个“约定”以及定义服务间通信所用消息的结构和方向的“消息类型”。

  • 一个为服务保存消息的“队列”。

  • (可选)“路由”和“远程服务绑定”。路由将网络地址与远程服务的名称相关联。远程服务绑定将服务名称与本地数据库主体相关联。Service Broker 使用与指定主体关联的证书来处理远程服务的授权以及与远程服务交换的消息的加密。Service Broker 允许在部署应用程序时配置路由和远程服务绑定,而无需更改应用程序。这就使管理员可以在不必更改应用程序代码的情况下移动服务和更改安全凭据。有关配置路由和远程服务绑定的详细信息,请参阅管理 (Service Broker)

Service Broker DML

应用程序通常在安装时设置服务定义对象。应用程序在运行时使用 Service Broker 数据操作语言 (DML) 发送和接收消息。DML 语句分为三大类:消息、会话和会话组:

消息

Service Broker 提供下列操作来支持消息的处理:

  • SEND 语句在特定会话中发送消息。

  • RECEIVE 语句从队列接收一个或多个消息。接收的所有消息均属于同一个会话组。

会话

Service Broker 提供下列操作来支持会话的处理:

  • BEGIN DIALOG CONVERSATION 语句启动两个服务间的会话。由于会话恰好涉及两个服务,因此会话为一个对话。

  • END CONVERSATION 语句结束会话的一端。

  • BEGIN CONVERSATION TIMER 语句在特定时间向会话的一端发送对话计时器消息。

  • GET_TRANSMISSION_STATUS 语句返回会话的最后一个传输错误的说明。如果为会话传输消息的最后一次尝试成功,则该语句不会返回说明。

会话组

Service Broker 提供两个操作来处理会话组:

  • GET CONVERSATION GROUP 语句返回队列中下一个可接收消息的会话组标识符。该语句还会锁定会话组。

  • MOVE CONVERSATION 语句将会话从一个会话组移动到另一个会话组。该语句可同时锁定原始会话组和目标会话组。