简介
RocketMQ是由阿里团队研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的开源项目
特点
具有灵活的可扩展性
RocketMQ天然支持集群,其核心四大组件(NameServer,Broker,Producer,Consumer)的每一个都可以在没有单点故障的情况下进行水平扩展
具有海量消息堆积能力
RocketMQ采用零拷贝原理实现了超大量消息的堆积能力,据说单机已经支持亿级消息堆积,而且在堆积了这么多消息后保持写入低延迟
支持顺序消息
RocketMq可以保持消息消费者按照消息的发送顺序对消息进行消费.顺序消息分为全局有序消息和局部有序消息,一般推荐使用局部有序消息,即生产者通过将某一类消息按照顺序发送至同一队列中来实现
支持多种消息过滤方式
消息过滤分为在服务器端过滤和在消费端过滤.在服务器端过滤时可以按照消息消费者的要求进行过滤,优点是减少不必要的消息传输,缺点是增加了消息服务器的负担,实现相对复杂.消费端过滤则完全由具体应用自定义实现,这种方式更加灵活,缺点是很多无用的消息会被传输给消息消费者
支持事务消息
RocketMQ除支持普通消息,顺序消息外,还支持事务消息,这个特性对于分布式事务来说提供了另一种解决思路
支持回溯消费
回溯消费指的是消费者已经消费成功的消息,由于业务需求需要重新消费.RocketMQ支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯
架构图讲解
Name Server
简介:NameServer是一个功能产全的服务器,其角色类似Dubbo中的Zookeeper,NameServer与Zookeeper相比更轻量
作用:NameServer的主要功能是为整个M集群提供服务协调与治理,具体就是记录维护Topic、Broker的信息,及监控Broker的运行状态。
brocker管理
NameServer接受Broker集群的注册信息,并目保存下来作为路由信息的基本数据
然后提供心跳检测机制,检查Broker是否还存活
路由信息管理
每NameServer将保存关于Broker集群的整人路由信息,Producer和Conumser通过NameServer,就可以知道整Broker群的路由信息,从而进行消息的投递和消费
注:Name Server节点采取集群部署,但节点之间不会同步数据。每个Name Server节点保存完整的数据,单个节点挂掉不会影响整个集群,
Broker集群
Broker采用主从集群模式,实现多副本存储和高可用。每个Broker节点都要与所有的Name Server节点建立长连接,以定义注册Topic的路由信息和发送心跳。通过与所有Name Server建立连接,Broker可以避免因单个Name Server节点挂掉而受到影响。在主从模式下,Slave节点主动从Master节点拉取消息。
Broker消息服务器,作为Server提供消息核心服务,它接收并存储Producer生产的消息
Broker的核心功能包含如下:
接收 Producer 发过来的消息
处理 Consumer 的消费消息请求
消息的持 久化存储
消息的 HA 机制
服务幄见端过滤功能等
官网上有数据显示:具有上亿级消息堆积能力,同时可严格保证消息的有序性
Producer
消息的生产者,通过name Server 找到broker地址,将消息推送到队列broker中,生产者将消息写入到消息队列中,可根据业务的不通采取不同的写入策略,例:
同步发送
异步发送
延迟发送
发送事务消息等
Consumer
Consumer,即消息消费者,负责消费消息。
Consumer也由用户部署,一般是后台系统负责异步消费
Consumer功能包含:
PUSH方式消费
顾名思义,就是推的意思,就是当MO收到生产者产生的消息的时候,会主动将消息推送到消费者进行消费,这种模式就push.
PULL方式消费
push是MQ主动给消费者推消息,那么pull呢? 刚好跟push相反,就是消费者主动去MQ中拉取消息.完全由业务系统去控制,定时拉取消息,指定队列消费等等,当然这里需要业务系统去根据自己的业务需求去实现。
.集群和广播消费
除此之外,还支持集群消费和广播消息消费,以及提供实时的消息订阅机制。