备忘:常见的消息中间件的简单比较

 

中间件名称 单机吞吐量 客户端语言 文档完备性 社区活跃度 商业支持 消息丢失 所属公司
ActiveMQ 万级 支持多语言,java优先 高 高 无 低 Apache
RabbitMQ 万级 多语言 高 高 无 低 Mozilla Public License
RocketMQ 十万级 只支持java 高 中 Alibaba 理论上不会 阿里开发,已捐献给Apache
Kafka 十万级 多语言,java优先 高 高 无 理论上不会 Apache

 

RocketMQ:

RocketMQ架构主要分为四部分:

Name Server:Name Server的作用就是记录其他节点的信息,它是无状态的(Topic等信息不会持久存储,而是每次由其他节点上报给它,Name Server关闭后将清除所有信息)。
Broker:Broker就是实际上做消息发送的,是一个集群部署上的概念,也可以理解为对应的物理机器。
Consumer:Consumer字面上的意思就是消费者,是消息的接收者,Consumer可以订阅一个或者多个Topic。
Producer:Producer是消息的生产者,它将消息发往对应的消息队列。

心跳机制:

所有的Broker都会和Name Server心跳请求,Broker每隔30秒会向所有的Name Server发送一个心跳包,心跳包中包含了自身所包含的Topic信息;如果在两分钟内都没有接收到某个Broker的心跳包,则认为该Broker已下线了,Name Server会调整Topic跟Broker的关系,但是!!!NameServer不会主动通知Consumer和Producer有Broker宕机了。
Consumer跟Broker是长连接,它会每隔30秒发送心跳信息给Broker,而Broker每隔10秒会扫描一次online的Consumer,如果两分钟内没有收到某个Consumer的心跳包,那么就会断开与该Consumer的连接,并通知该消费组的其他实例,触发该消费者集群的负载均衡。
Producer每隔30秒从Name Server获取Topic和Broker的映射关系,并更新到本地内存中;再跟Topic所涉及的所有Broker建立长连接,并且每隔30秒发送一遍心跳包,此时Broker端也会每隔十秒钟扫描一次当前注册的所有Producer,如果两分钟内没有收到某个Producer的心跳包,那么长连接断开。

 

 

.

此条目发表在technologys分类目录。将固定链接加入收藏夹。