ServiceBroker(简称SSB)是基于数据库引擎提供的一个强大的异步编程模型,通过ServiceBroker,开发人员无需编写复杂的通信和消息程序,即可在数据库实例之间完成高效可靠的异步通信。
Service Broker具有如下特点:
1 数据库集成
完全基于数据库引擎,无需任何开发。对象和数据也存储于数据库中,可以应用标准的数据维护方法(例如备份/还原数据)。
2 自动激活
可以为接收消息的Service配置消息处理存储过程,当收到消息时,自动激活该存储过程处理收到的消息。
3 相关消息锁定
同一会话组的消息可以保证由同一个消息处理过程处理。这在处理如订单这类,可能包含订单主表、订单明细等多条消息的情况下非常有用
4 排序和协调消息
在传递大内容的消息时,ServiceBroker会自动分拆消息,并且在接收端自动组合消息,无需编写额外的代码来保证这些分拆后的消息能够按照正确的顺序还原
5 松耦合与工作负荷灵活性
消息发送和接收可以随时被中断,恢复时将自动恢复消息处理,在自动激活的消息处理中,可以设置并发的线程数,以控制消息处理的速度。消息传递可以通过多个路由到达目的端,也可以避免因为某部分网络或者服务器负载过重导致消息无法及时到达目的地。
Service Broker通常用于:
1 异步触发器
2 大规模批处理
3 可靠和异步处理
完整的ServiceBroker如图所示。包含三层架构:
1 ServiceBroker对象
位于用户数据库内。一个标准的ServiceBroker对象由Service(服务,是消息发送和接收处理接口、Queue(队列,存储发送和接收的消息)、Contract(约束,确定这个ServiceBroker对象可以处理的消息规则)、MessageType(消息类型,确定具体的消息结构)。
2 数据库级ServiceBroker对象
同一数据库内的ServiceBroker对象之间可以直接传递消息。如果要与其他数据库的ServiceBroker对象传递消息,则必须在数据库中创建路由(Route)来标识本数据库外的ServiceBroker对象(体现在用于接口的Service上);如果ServiceBroker对象位于其他实例,则除了跌幅外,还可能需要创建用于身份验证的远程服务绑定(RemoteService Binding)。
3 服务器级ServiceBroker对象
当要与本实例外的ServiceBroker对象传递消息的时候,必须要在实例之间建立消息通道。实例级的ServiceBroker Endpoint用于完成此项工作,为了保证消息传输的安全性,还需要配置用于ServiceBroker Endpoint安全的相关对象。
如果想了解有关Service Broker更为详细的信息,可以参考联机帮助:
http://msdn.microsoft.com/zh-cn/library/bb522893.aspx
如果想自己动手配置一下Service Broker,可以参考联机帮助上的教程:
http://msdn.microsoft.com/zh-cn/library/bb839489.aspx