RabbitMQ是采用Erlang语言实现的AMQP开源版本,用于解决JMS消息协议标准化使得大型系统之间应用程序之间的结合变动的脆弱(JMS的解耦特性)。
为什么叫RabbitMQ
兔子行动非常迅速而且繁殖起来也非常疯狂,所以就把Rabbit用作这个分布式软件的命名----《RabbitMQ实战》。
RabbitMQ产生背景
1、消息队列系统最早由26岁孟买工程师构想,用于解决程序间繁重的通信工作。1983年最早的消息队列软件Teknekron诞生,当时仅用于一些金融交易等系统。
2、随后,诞生了世界上第一个消息队列软件TIB(The Information Bus)
3、20世纪80年代后期,诞生了多家消息队列系统,例如IBM MQ、微软的MSMQ、TIBCO MQ等消息队列在企业中的应用也愈加广泛。当时这些MQ完全是商用的,企业使用需要付出巨大的代价,并且各个供应商产品之间遵循不同的API协议。
4、2001 JMS(Java Message Servive)诞生,JMS的诞生是因为中小企业对MQ高价格的不满,Java开发者只需要遵循JMS API协议和技术规范即可。由于过分的标准化协议,使得大型系统(这里参照的应该是金融系统)应用程序间的结合变得脆弱,因此需要一个新的标准。
5、2004年,AMQP(Advanced Message Queuing Protocol,高级消息队列协议)开始开发,以解决众多的消息队列需求和拓扑结构问题。通过这一标准可以和任意AMQP供应商提供的MQ服务进行交互。
6、2006年,光阴荏苒时光如梭,一转眼就说到了重点。我们的主角使用Erlang语言实现的AMQP开源版本,RabbitMQ诞生了,同年AMQP协议首次发布。
为什么选择RabbitMQ
在众多的理由里面我觉得唯一具有差异性的就是“Rabbit是唯一实现了AMQP标准的代理服务器”。
总结:其他理由诸如
1.商业化运营,社区活跃,WEB管理和监控,集群扩展容易(不支持动态扩展),高并发(Erlang特性,直接问题就是维护性降低)这些条件对于使用MQ服务的场景来说成本都可以接受;
2.RabbitMQ使用ProtoBuf序列化消息,相比XML具有数据量小3-10倍,速度快20-100倍,易于编程,减少语义的歧义。关于这个问题,这是ProtoBuf对比XML的优势,对比JSON这个优势也就没有了。
3.支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。这个看语言选择,但是我觉得这是产品运营优势,而不是MQ服务优势。
总结: