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)。
服务代理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语句将对话从一个会话组移到另一个会话组。 该语句可同时锁定原始会话组和目标会话组。