转自: http://book.51cto.com/art/201502/466288.htm 为什么我们需要MQ?
而这就是MQ :一个高效的可嵌入库,它解决了大部分应用程序需要解决的问题,变得在网络上有良好的可伸缩性,而没有多少成本。
具体做法是:
它在后台线程异步处理I/O。这些线程使用无锁数据结构与应用程序线程进行通信,所以并发MQ 应用程序不再需要锁、信号量,或其他等待状态。
组件可以动态地来去自如,而MQ 会自动重新连接。这意味着你可以以任何顺序启动组件。你可以创建“面向服务的架构”(SOA),其中的服务可以在任何时间加入和离开网络。
它根据需要自动对消息排队。为此,它会智能地在对消息排队之前,将消息尽可能地推进到接收者。
它有一个处理过满队列(称为“高水位标志”)的方法。当队列满时,MQ 会自动阻止发件人,或丢弃消息,这取决于你正在做的是哪种消息传递(即所谓的“模式”)。
它可以让你的应用程序通过任意传输协议来互相交流,这些协议可以是:TCP、多播、进程内、进程间。你不需要更改代码以使用不同的传输工具。
它使用依赖于消息传递模式的不同策略,安全地处理速度慢/ 阻塞的读取者。
它可以让你采用多种模式,如请求- 应答和发布- 订阅来将消息路由。这些模式是指你如何创建拓扑结构和网络结构。
它可以让你创建代理(proxy)来排队、转发,或通过一个调用来捕获消息。代理可以降低网络互联的复杂性。
它使用在线路上的简单组帧原封不动地传递整个消息。如果你写了一个10KB 的消息,那么你将收到一个10KB 的消息。
它不对消息强加任何格式。它们是零字节到千兆字节的二进制大对象。当你想表示你的数据时,可以选择其上的其他一些产品,如谷歌的协议缓冲区、XDR 等。
它能智能地处理网络错误。有时候它会重试,有时它会告诉你某个操作失败。
它可以减少你的能源消耗。少花CPU 多办事意味着使用电脑更少的能源,你可以让你的旧电脑使用更长的时间。戈尔(译者注:美国前副总统,环保主义者)也会爱上MQ 的。
实际上,MQ 做的比这更多。它对你如何开发网络功能的应用程序有颠覆性的影响。从表面上看,这是一个在其上做zmq_msg_recv() 和zmq_msg_send() 的套接字风格的API。但该消息处理循环迅速成为中心循环,而你的应用程序很快就会分解成一组消息处理任务。它是优雅和自然的。而且,它可扩展:每个任务 对应一个节点,节点通过任意传输方式互相交谈。在一个进程中的两个节点(节点是一个线程),在一台电脑中的两个节点(节点是一个进程),或一个网络上的两 台电脑(节点是一台电脑),所有的处理方式都是相同的,不需要更改应用程序代码。