MQ选型对比RabbitMQ RocketMQ ActiveMQ

几种MQ产品说明:

     ZeroMQ :  扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的从新封装,若是咱们作为消息队列使用,须要开发大量的代码

    RabbitMQ :结合erlang语言自己的并发优点,性能较好,可是不利于作二次开发和维护

    ActiveMQ: 历史悠久的开源项目,已经在不少产品中获得应用,实现了JMS1.1规范,能够和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多).,支持持久化到数据库,对队列数较多的状况支持很差,不过咱们的项目中并不会建不少的队列.

    Redis 作为一个基于内存的K-V数据库,其提供了消息订阅的服务,能够看成MQ来使用,目前应用案例较少,且不方便扩展

    RocketMQ: 阿里巴巴的MQ中间件,在其多个产品下使用,并可以撑住双十一的大流量,他并无实现JMS规范,使用起来很简单。部署由一个 命名服务(nameserver)和一个代理(broker)组成,nameserver和broker以及producer都支持集群,队列的容量受机器硬盘的限制,队列满后能够支持持久化到硬盘(也能够本身适配代码,将其持久化到NOSQL数据库中),队列满后会影响吞吐量,能够采用主备来保证稳定性,支持回溯消费,能够在broker端进行消息过滤.

针对消息中间件的选择能够从如下方面进行考虑:(主要对比ActiveMQ和RocketMQ)
     优先级:咱们的项目对此需求不是特别明显,RocketMQ须要新建一个特殊队列来接收优先级高的队列,没法实现从0-65535这种细粒度的控制,ActiveMQ能够精细控制
        顺序:咱们的消息总线中的消息应该都是无状态的,因此对消息的处理顺序没有严格的要求,若是有特殊要求的话能够在业务层进行控制,activeMQ没法保证严格的顺序,RocketMQ能够保证严格的消费顺序
    持久化:都支持
   稳定性:RoketMQ在稳定性上可能更值得信赖,支持多种集群方案,毕竟已经撑过几个双十一
  消息过滤:ActiveMQ仅支持在客户端消费的时候进行判断是不是本身须要的消息,RocketMQ能够在broker端进行过滤,对于咱们的消息总线,这里能够节省大量的网络传输是否会有消息重发形成的重复消费:RocketMQ能够保证,ActiveMQ没法保证
  回溯消费:即从新将某一个时刻以前的消息从新消费一遍,咱们对于这种需求应该不多,RocketMQ支持,ActiveMQ不支持(RocketMQ的队列是持久化到硬盘的,按期进行清除
          事务:都支持
  定时消费:RocketMQ支持
   消息堆积:就是当缓存消息的内存满了以后的解决方案,一种是丢弃策略,这种不会影响吞吐量,还有一种就是将消息持久化到磁盘,这种会影响吞吐量,在评估影响程度上,RocketMQ的成绩稍微好一点
  客户端不在线:RocketMQ能够在客户端上线后继续将未消费的消息推送到客户端
      目前比较活跃的几种MQ中间件产品的对好比下:(仅统计开源的项目)

php

这里写图片描述

  ActiveMQ RabbitMQ RocketMq ZeroMQ
关注度  
成熟度   成熟 成熟 比较成熟 不成熟
所属社区/公司 Apache  Mozilla
Public
License
Alibaba    
社区活跃度  
文档  
特色   功能齐全,被大量开源项目使用 因为Erlang 语言的并发能力,性能很好    各个环节分布式扩展设计,主从 HA;支持上万个队列;多种消费模式;性能很好 低延时,高性能,最高 43万条消息每秒  
受权方式   开源 开源 开源 开源
开发语言   Java Erlang   Java   C
支持的协议   OpenWire、
STOMP、
REST、XMPP、
AMQP
AMQP   本身定义的一
套(社区提供
JMS--不成熟)
TCP、UDP
客户端支持语言   Java、C、
C++、
Python、
PHP、
Perl、.net 等  
Java、C、
C++、
Python、 PHP、Perl 等
Java  
C++(不成熟)  
 
python、 java、 php、.net 等
持久化   内存、文件、数据库 内存、文件 磁盘文件 在消息发送端保存
事务   支持 不支持 支持 不支持
集群   支持 支持 支持 不支持
负载均衡 支持 支持 支持 不支持
管理界面   通常 无社区有 web
console   实现
部署方式   独立、嵌入 独立 独立 独立
评价   优势:
   成熟的产品,已经在不少公司获得应用(非大规模场景)。有较多的文档。各类协议支持较好,有多重语言的成熟的客户端;
缺点:
根据其余用户反馈,会出莫名其妙的问题,切会丢失消息。 其重心放到activemq6.0 产品—apollo 上去了,目前社区不活跃,且对 5.x 维护较少;
Activemq 不适合用于上千个队列的应用场景
优势:   因为erlang语言的特性,mq 性能较好;管理界面较丰富,在互联网公司也有较大规模的应用;支持amqp系诶,有多中语言且支持 amqp 的客户端可用
 
缺点:
  erlang语言难度较
大。集群不支持动态扩展。
优势:
   模型简单,接口易用(JMS   的接口不少场合并不太实用)。在阿里大规模应用。目前支付宝中的余额宝等新兴产
品均使用rocketmq。集群规模大概在50 台左右,单日处理消息上百亿;性能很是好,能够大量堆
积消息在broker   中;支持多种消费,包括集群消费、广播消费等。开发度较活跃,版本更新很快。
 缺点:
  没有在 mq 核心中去实现JMS 等接口,
 
 

 

站在巨人的肩膀上