






在项目设计、开发过程中,当我们遇到以下几种情况都可以使用消息队列:
以上几个应用场景仅仅是我的一家之言,可以根据具体业务需求,灵活运用,消息队列更多的是一种解决问题的思路,见仁见智!
消息队列通过消息的生产/订阅,把消息写入消息队列,通过消费者订阅提取出来,对数据进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
另外消息队列还有两个优点,平台无关性,分布式部署;这个也是我个人比较看重的地方.
MSMQ:
这是微软的产品里唯一被认为有价值的东西。对我的客户来说,如果MSMQ能证明可以应对这种任务,他们将选择使用它。关键是这个东西并不复杂,除了接收和发送,没有别的;它有一些硬性限制,比如最大消息体积是4MB。然而,通过和一些像MassTransit 或 NServiceBus这样的软件的连接,它完全可以解决这些问题。
ActiveMQ:
Java世界的中坚力量。它有很长的历史,而且被广泛的使用。它还是跨平台的,给那些非微软平台的产品提供了一个天然的集成接入点。然而,它只有跑过了MSMQ才有可能被考虑。
RabbitMQ:
我听说了很多关于这个用Erlang写成的消息中间件的优秀的特性。它支持开放的高级消息队列协议 (AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要MassTransit 或 NServiceBus 的配合。它还具有“企业级”的适应性和稳定性。这些东西对客户来说十分的有吸引力。
我个人也比较偏好使用RabbitMQ,在商业环境中也有使用经验,能够承担商业级应用。
ZeroMQ:
我在研究AMQP时从发现了这个产品。开发这个产品的公司是AMQP集团的一部分,并且还有一个叫做OpenAMQ的产品。然而,他们却戏剧性的从AMQP分离的出去,并抱怨说这这个产品迷失了方向、变的越来越复杂。你可以到这里阅读Dear John的关于此事的文章。ZeroMQ具有一个独特的非中间件的模式,也就是说,跟其它几个接受测试的产品不同,你不需要安装和运行一个消息服务器,或中间件。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。
高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和客户端可以投入使用。
AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。
本文中的AMQP服务器是使用Erlang编写的RabbitMQ。它实现了AMQP规范0-8版的内容,并且将在近期实现0-9-1版的内容。
在开始之前再交代一些东西:异步消息是一个非常普通并且广泛使用的技术,从例如Skype或者XMPP/Jabber这样各种各样的即时消息协议到古老的email。
但是,这些服务都有如下特征:
AMQP是一个抽象的协议(也就是说它不负责处理具体的数据),这个事实并不会将事情变得更复杂。反而,Internet使得消息无处不在。人们通常使用它们和异步消息简单灵活地解决很多问题。而且构建AMQ中的异步消息架构模型最困难的地方在于上手的时候,一旦这些困难被克服,那么构建过程将变得简单。
安装:
需要说明的是,RabbitMQ支持目前主流的所有操作系统,这一点也是吸引我的地方。
详细的安装步骤可以参考:
RabbitMQ的文档比较全面,网上资料比较丰富,学习成本相对已经比较低了。
现在你需要做的就是启动RabbitMQ服务器。
今天到此为止吧,改天再写关于RabbitMQ的运行机制,后续会出来具体的使用方法,以及我对RabbitMQ的简单实用封装。
参考资料:
AMQP和RabbitMQ入门 http://www.infoq.com/cn/articles/AMQP-RabbitMQ此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。