企业应用中,对于面向服务的基础设施体现为ESB, 面向服务的消息机制有一种是One-way, 一种是Request/response, 一种是Pub/sub
这三种模式其实可以同分为两类,同步和异步. 对于异步而言, 可能存在一个很复杂的环境中. 客户端跟服务端需要一个可靠的消息传递机制.他们要解决网络时断时续,机器不能100%可靠等问题.这种传递机制微软的平台是MSMQ, 最近SQL 2005 也提供了个数据库段到数据库段的可靠消息传递机制.SQL Service Broker
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基础框架都必须考虑的关键部分。
本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号