微软为开发人员提供了两种消息队列:MSMQ和SQL Service Broker。这两种消息队列在很多功能上类似。但它们在一些重要领域的差异也许会影响我们的选择。其中MSMQ是一项非常成熟的技术,而SQL Service Broker是非常新的技术,这项技术对于大多数开发人员来说可能并未使用过。为了使广大的开发人员了解这两项技术有什么不同,并且使开发人员知道在什么情况下应该使用哪种技术,本文就这两种技术的不同做了一下详细的阐述。这将会有助于人们做出正确的选择。
虽然很多开发人员都知道消息队列,但大多数人在企业应用中却没有充分发挥这项技术优势。如果能合理使用消息队列。可以大大改善用户接口交互,如提高资源异步访问的吞吐量,增强消息队列的负载平衡,使客户机可以暂时脱离消息队列工作,从而使客户端和服务端形成一种松散的工作模式。消息队列对开发人员的好处也显而易见,因为大多数复杂的工作已经被微软封装了起来,而这一切对开发人员都是透明的。如开发人员不需要直接使用数据表和存储过程在SQL Server中手工创建队列。虽然除了这两种消息队列,还有很多其他的消息队列,如IBM的MQ系列以及BEA的MessageQ,但MSMQ和Service Broker是所有使用微软开发工具的程序员的首选消息队列。对于MSMQ来说,任何版本的SQL Server都可以使用,而MSMQ和SQLService Broker在几乎所有的Windows平台都可以使用。
微软最初是在Windows NT4.0的选择包中提供MSMQ的,自从那时微软对MSMQ进行了数次修订。MSMQ自从它发布那天起,就是免费的。所有Windows消息队列版本都包含MSMQ,MSMQ还提供了API、COM和.NET接口,用于发送和接受数据,并管理消息队列。
随着SQL Server2005的发行,微软在这个SQL Server版本中提供了Service Broker,作为除了MSMQ的另一种选择。由于Service Broker和SQL Server2005绑定十分紧密,因此,Service Broker在和数据关联非常紧密的队列操作中比MSMQ更有效率。但Service Broker并不是免费的,要想使用Service Broker,必须得到微软的授权。Service Broker可以使用任何程序设计语言进行访问,当然,这种语言必须能访问SQL Server。还有在SQL Service Broker的大多数队列操作都是通过T-SQL来完成的。
这两个消息队列从表面上看非常相似,如它们都提供了先入先出的队列优先算法、异步消息处理以及从各种语言可访问的特性。但它们也有很多的不同点。表1将给出SQL Service Broker和MSMQ的主要区别。虽然这个表中的数据并不能完全体现这两种技术,但却能很清楚地了解它们之间的主要差异。这些差异将帮助正在这两种产品之间徘徊的人们做出最后的决定。
特性
|
MSMQ
|
SQL Service Broker
|
成本
|
对所有Windows用户免费
|
必须得购买SQL Server2005许可证
|
性能
|
性能非常高
|
当使用非标准的功能时性能会低一些
|
事务
|
分布式事务,但成本较高
|
由于使用SQL Server的内部事务处理机制,因此,效率很高
|
代码位置
|
队列代码不能运行在SQL Server中
|
队列代码可以运行在SQL Server中
|
强类型
|
通过消息类型和契约提供强类型
|
无强类型
|
脱机队列
|
完全支持脱节队列工作模式
|
要去必须得连接到SQL Server上
|
备份
|
特殊的备份
|
使用SQL Server2005的备份功能
|
表1 MSMQ 和 Service Broker 的差异
为了使用MSMQ,你必须使用Windows NT4、Windows2000、Windows XP或Windows Server2003。MSMQ所支持的Windows平台非常广,如果你现在的操作系统平台的版本比较老,如Windows NT或Windows2000,那么MSMQ将是你最好的选择。如果只在客户端有一些限制时,也可以考虑选择SQL Service Broker,因为这个消息队列的客户端几乎可以运行在任何Windows平台上,这是因为Service Broker的客户端只需要能连接SQL Server2005即可。