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

 

中间件名称 单机吞吐量 客户端语言 文档完备性 社区活跃度 商业支持 消息丢失 所属公司
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分类目录。将固定链接加入收藏夹。