RocketMQ简介
RocketMQ是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目。
RocketMQ具备:纯JAVA实现、具有高性能、高可靠、高实时、分布式等特点,在生产环境有大量的应用。
RocketMQ架构
RocketMQ架构,如下图所示:
RocketMQ架构:主要由NameServer、Broker、Producer以及Consumer四部分构成,下面分别详解@mikechen
NameServer
1.NameServer简介
NameServer是一个功能齐全的服务器,其角色类似Dubbo中的Zookeeper,但NameServer与Zookeeper相比更轻量。
2.NameServer作用
NameServer的主要功能是为整个MQ集群提供服务协调与治理,具体就是记录维护Topic、Broker的信息,及监控Broker的运行状态。
3.NameServer功能
主要包括两个功能,如下图所示:
1)Broker管理
- NameServer接受Broker集群的注册信息,并且保存下来作为路由信息的基本数据;
- 然后提供心跳检测机制,检查Broker是否还存活;
2)路由信息管理
每个NameServer将保存关于Broker集群的整个路由信息,Producer和Conumser通过NameServer,就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。
Producer
Producer,就是消息生产者,负责产生消息,如下图所示:
生产者向消息队列中写入消息,根据不同的业务场景需要采用不同的写入策略,比如:
- 同步发送;
- 异步发送;
- 延迟发送;
- 发送事务消息等;
Producer通过MQ的负载均衡模块,选择相应的Broker集群队列进行消息投递。
Broker
Broker消息服务器,作为Server提供消息核心服务, 它接收并存储Producer生产的消息。
如下图所示:
Broker的核心功能包含:
- 接收 Producer 发过来的消息;
- 处理 Consumer 的消费消息请求;
- 消息的持 久化存储;
- 消息的 HA 机制;
- 服务端过滤功能等 ;
官网上有数据显示:具有上亿级消息堆积能力,同时可严格保证消息的有序性。
Broker配置,如下图所示:
Consumer
Consumer,即消息消费者,负责消费消息。
如下图所示:
Consumer也由用户部署,一般是后台系统负责异步消费。
Consumer功能包含:
1.PUSH方式消费
顾名思义,就是推的意思,就是当MQ收到生产者产生的消息的时候,会主动将消息推送到消费者进行消费,这种模式就叫push。
2.PULL方式消费
push是MQ主动给消费者推消息,那么pull呢?刚好跟push相反,就是消费者主动去MQ中拉取消息。
完全由业务系统去控制,定时拉取消息,指定队列消费等等,当然这里需要业务系统去根据自己的业务需求去实现。
3.集群和广播消费
除此之外,还支持集群消费和广播消息消费,以及提供实时的消息订阅机制。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》