rocketmq的文章在网络上有大量的文章分析,而且分析的非常不错。本人此处发表rocket文章只是学习过程中的心得体会,可能分析不是很准确,希望有缘人指出其中问题,日后改正!
rocketmq总体架构
从上图中可以看出,rocketmq主要分为四大部分,分别为nameserver,broker,produer,consumer。其中每一个部分都可以集群部署。
- nameServer集群:独立部署,互相不受影响,主要是保存了broker注册的相关信息,与其他三个集群之间采用长连接通讯。其中一台宕机,不影响其他的机器。
- broker集群:rocketmq中消息的存储与转发服务器,主要有多个master-slave模式,双master部署模式,单个master模式。消息在每一个master中都是同样的存储,集群内部master与slave之间的有同步,异步通讯方式。
- producer集群:产生消息的集群,可以是单个应用也可以是集群。通过长连接向nameServer集群获取topic列表,向broker集群进行发送消息。producer与master建立长连接。
- consumer集群:消费消息的集群,可以是单个应用也可以集群。消费消息方式主要有广播和集群两种模式。consumer通过长连接向nameserver集群获取topic列表,然后从broker集群中消费消息。consumer与broker集群中的master和slave都建立长连接,这个与producer不同。
rocketmq逻辑架构
rocketmq逻辑图中显示,生产者producer与消费者consumer通过broker集群来进行消息的转发与存储。其中topicA,B,C,D在rocketmq中是消息的分类。
- Topic:一个topic代表一类消息,通常指一个应用的消息对应一个Topic。生产者可以自己发送消息时告诉broker创建集群(开发环境可以),也可以通过命令在broker集群中创建好(生产环境推荐)。broker将topic信息注册到nameserver集群中。
- tags:消息标签,在同一个topic中,可以通过tags进行消息分类或过滤。
NameServer集群
- nameServer集群没有名称,可以横向扩展,集群内部各个机器没有任何通讯
- broker集群中的每个节点启动时,都会通过长连接向nameServer集群中注册信息(主要是topic路由信息)
- producer发送消息时,通过长连接向nameServer获取topic路由信息,从而实现与broker中master通讯。
- consumer消费消息时,通过长连接向nameServer获取topic路由信息,达到consumer与master,slave通讯。
5.nameServer中保存的路由信息都保存在内存中,宕机之后,消息丢失。rocketmq主要是通过RouteInfoManager类管理。
图中就是通过mqadmin命令查看的topicTestA路由信息