Fork me on GitHub

MSMQ 与ESB

企业应用中,对于面向服务的基础设施体现为ESB, 面向服务的消息机制有一种是One-way, 一种是Request/response, 一种是Pub/sub
这三种模式其实可以同分为两类,同步和异步. 对于异步而言, 可能存在一个很复杂的环境中. 客户端跟服务端需要一个可靠的消息传递机制.他们要解决网络时断时续,机器不能100%可靠等问题.这种传递机制微软的平台是MSMQ, 最近SQL 2005 也提供了个数据库段到数据库段的可靠消息传递机制.SQL Service Broker

sqlbroker     msmq

MSMQ允许双方在离线的状态下进行通信,且它提供了一整套易于使用的API,并已经集成到了.NET框架中,这一点要比Service Broker好得多。

MSMQ从NT开发就有了,最新版本是4.0,MSMQ 在各个操作系统的对应版本:

MSMQ版本 操作系统
1.0 Windows NT4, Windows 95/98/Me
2.0 Windows 2000
3.0 Windows XP, Windows 2003
4.0 Windows Vista, Windows Server 2008

我们目前的应用一般都是msmq 3.0 ,他有一些特性,比如有触发器, http 转发等特性.对于事务的支持, msmq 支持一下两种类型的事务.
1. 发送消息, 目前可以在不同的机器之间开启一个事务. 可靠的发送消息.
2. 接受消息,目前只支持同一个机器上,不同程序之间的事务中接受消息,这个也是msmq 3.0 的一大不足. 因为这也限制,往往会要求处理程序跟队列在一个机器上.

MSMQ4.0在事务支持方面的得到了改进,它允许在不同的机器之间使用事务来接受消息. 多了一个subqueue,子队列,对多个in order消息的处理改进等

MSMQ 4.0新特性参看http://msdn2.microsoft.com/zh-cn/library/ms701784(en-us).aspx

MSDN Code 上有一个SOA'izing MSMQ with WCF (and Why It's Worth It),是学习WCF和MSMQ的一个我所看到的最好的教程。

ESB使用的消息通信采用MSMQ对于保证消息的可靠性,离线性方面的支持最好的,支持离线通信是任何SOA基础框架都必须考虑的关键部分。

A comprehensive guide to using MsmqIntegrationBinding with MSMQ 3.0 in WCF http://blogs.conchango.com/simonevans/archive/2007/09/17/A-comprehensive-guide-to-using-MsmqIntegrationBinding-with-MSMQ-3.0-in-WCF.aspx

Yoel's Microsoft Message Queue (MSMQ) space http://msmq.spaces.live.com/

posted @ 2008-04-26 23:46  张善友  阅读(7375)  评论(1编辑  收藏  举报