之前的项目中都用到了这两个消息队列,因此总结一下它们的不同之处,做一个笔记,下次需要的时候再行参考。

概念
ActiveMq,传统的消息队列,使用Java语言编写。基于JMS(Java Message Service),采用多线程并发,资源消耗比较大。支持P2P和发布订阅两种模式,如果使用java语言开发项目,可以考虑使用activeMQ。

RabbitMQ,基于AMQP协议实现,支持多种场景,社区活跃量大。高性能,高可用,支持海量数据。

为什么使用消息队列
六个字:异步、解耦、削峰。
使用了消息队列会有什么缺点
一个使用了MQ的项目,如果连这个问题都没有考虑过,就把MQ引进去了,那就给自己的项目带来了风险。我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。要记住,不要给公司挖坑!
从以下两个个角度来考虑:

系统可用性降低:你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。现在你非要加个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性降低。

系统复杂性增加:要多考虑很多方面的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。因此,需要考虑的东西更多,系统复杂性增大。

版本更新
ActiveMq几个月才发一次版本,更新较慢,据说研究重心在他们的下一代产品Apollo。
RabbitMQ版本发布比ActiveMq频繁很多。
来一个性能对比表

JMS和AMQP
两者还有区别是实现机制不同,主要是jms和amqp的区别。

JMS提供了两种消息模型,peer-2-peer(点对点)以及publish-subscribe(发布订阅)模型。
在AMQP中,消息路由(messagerouting)和JMS存在一些差别,在AMQP中增加了Exchange和binding的角色。producer将消息发送给Exchange,binding决定Exchange的消息应该发送到那个queue,而consumer直接从queue中消费消息。queue和exchange的bind有consumer来决定。
(此图取自别处)jms和amqp对比


————————————————
版权声明:本文为 原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。