1、了解RocketMQ
1.1、RocketMQ的前世今生
RocketMQ是阿里开源的一款十分优秀的消息队列,rocketMQ具有很多其他消息队列不具有的特性,更重要的是rocketMQ是用java开发的学习成本较低,并且经历了双11的数据洪峰的考验。rocketMQ已经加入了apache,成为apache的顶级项目。
1.2、相关链接
RocketMQ的官网:http://rocketmq.apache.org/
RocketMQ的gitHub:https://github.com/apache/rocketmq
1.2、RocketMQ的架构图和相关概念
1.2.1、RocketMQ的架构图
RocketMQ架构分为四个模块:NameServer, Broker,Producer,Consumer
1.2.2、RocketMQ的相关概念
- NameServer
Namesrv 是由阿里云RocketMQ中间件开发团队开发的基于服务注册发现功能的无状态组件,支持独立部署。Namesrv在整个RocketMQ架构体系中,属于重中之重的组件,乃灵魂级组件,统筹全局,可谓之'一家之主'。上可撩得生产者靓妹,下可驾驭消费者御姐,亦可跟broker徐娘亲近。
那么它又是如何工作的呢?
1、生产者从namesrv中获取可用的broker地址,将消息发送至broker。
2、消费者从namesrv中获取可用的broker地址,从broker中拉去消息。
3、broker定时向naemsrv发送心跳信息,维护可用broker地址。
相对来说,nameserver的稳定性非常高。原因有二:
1、 nameserver互相独立,彼此没有通信关系,单台nameserver挂掉,不影响其他nameserver,即使全部挂掉,也不影响业务系统使用,这点类似于dubbo的zookeeper。
2 、nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高。
NameServer类似于SpringCloud中的eureka
- Broker
Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示 Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
与nameserver关系 :连接 :单个broker和所有nameserver保持长连接
心跳 : 心跳间隔:每隔30秒(此时间无法更改)向所有nameserver发送心跳,心跳包含了自身的topic配置信息。 心跳超时:nameserver每隔10秒钟(此时间无法更改),扫描所有还存活的broker连接&#x