之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识 (1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的 基础文章。在那篇文章里,我们详细介绍了MSMQ消息队列的基本概念、安装、部 署、开发、调试等相关问题。今天我们来学习WCF分布式开发步步为赢(13):WCF 服务离线操作与消息队列MSMQ。在WCF框架下使用MSMQ消息队列服务编程。 这 里我会给出一个使用WCF MSMQ实现离线请求的DEMO示例程序。
全文结构是:【1】MSMQ基本概念【2】WCF消息队列MSMQ的优势【3】WCF 消 息队列MSMQ通信框架【4】安装配置注意事项【5】示例代码 【总结】
【1】MSMQ基本概念:
简要回顾一下MSMQ的基本概念,详细的你们可以参考WCF分布式开发必备知识 (1):MSMQ消息队列。
MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之 间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上 ,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者 把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存 至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接 收程序再从该队列中取出发给它的消息进行处理。
【2】WCF消息队列MSMQ的优势:
消息队列MSMQ的优点:稳定、消息优先级、脱机能力以及安全性,有保障的消 息传递和执行许多业务处理的可靠的防故障机制。 因此消息队列是实现SOA面向 服务架构的重要组件之一。WCF框架提供了和MSMQ集成与扩展的能力。这一点也 是WCF在特性中明确指出的。MSMQ支持离线消息模式,而且在WCF框架下,提供了 基于http桥的internet网络队列服务的调用扩展。和MSMQ框架的结合和扩展,使 得WCF服务具有的新的特点:
【2.1】Availabiliy:可用性。这个是MSMQ离线消息的一种体现。客户单和服 务端不需要实时进行连接,然后进行消息的交互.WCF 客户端可以发送请求到离 线服务端,服务上线以后在相应客户端请求。
【2.2】Disjoint:分解。可以讲工作分解为多个操作,一次放入队列。改善 系统的可用性和吞吐量。
【2.3】Compensating:补偿。对于多业务事务,可以提供单独的事物提供其 它事务失败的善后处理。
【2.4】Load Leveling:负载平衡。可以把过载的客户端请求放入队列,空闲 的时候进行处理,平衡系统的吞吐量,改善性能。
【3】WCF 消息队列MSMQ通信框架:
WCF使用NetMsmqBinding来支持消息队列通信。当客户端调用服务时,客户端 消息会被封装为MSMQ消息,发送懂到特定的消息队列。服务端宿主在运行转台下 会,启动通道侦听器,来检测消息队列消息,如果发现对应的消息,会从队列里 取出消息,使用分发器转发给对应的服务。具体的通信架构如图:
如果宿主离线,消息会被放入队列,等待下一次宿主联机时,在执行消息分 发处理,给指定的WCF服务。