点击上方 Java后端,选择 设为星标
优质文章,及时送达
事情是这样的,只是刚好在简历写了项目用到了RocketMq,只是碰巧收到了一条Boss的信息,显示是阿里的招聘者,又刚好我把这份简历发了出去,刚好过了几天,一个电话打来了,上来的第一个问题就是你说下RocketMq的原理,我懵了,大脑一片空白......
事后我也反思了下,我确实用过RocketMq开发过生产者和消费者应用,RocketMq面试的东西也不多,理解记忆就行了,不信你往下看:
RocketMq是什么
一个纯Java、分布式队列模型的消息中间件,具有高可用、高可靠、高实时、低延迟的特点。(记住这句就行了)
RocketMq有什么功能
先答出消息中间件的通用功能
再说说RocketMq的特点:
3、亿级消息的堆积能力,单个队列中的百万级消息的累积容量。
4、高可用性:Broker服务器支持多Master多Slave的同步双写以及Master多Slave的异步复制模式,其中同步双写可保证消息不丢失。
5、高可靠性:生产者将消息发送到Broker端有三种方式,同步、异步和单向,其中同步和异步都可以保证消息成功的成功发送。Broker在对于消息刷盘有两种策略:同步刷盘和异步刷盘,其中同步刷盘可以保证消息成功的存储到磁盘中。消费者的消费模式也有集群消费和广播消费两种,默认集群消费,如果集群模式中消费者挂了,一个组里的其他消费者会接替其消费。综上所述,是高可靠的。
6、支持分布式事务消息:这里是采用半消息确认和消息回查机制来保证分布式事务消息的,下面会详细描述。
7、支持消息过滤:建议采用消费者业务端的tag过滤
8、支持顺序消息:消息在Broker中是采用队列的FIFO模式存储的,也就是发送是顺序的,只要保证消费的顺序性即可。
9、支持定时消息和延迟消息:Broker中由定时消息的机制,消息发送到Broker中,不会立即被Consumer消费,会等到一定的时间才被消费。延迟消息也是一样,延迟一定时间之后才会被Consumer消费。
能说出这么多已经不错了????
RoctetMq的架构
回到最开始的问题,RocketMq的原理是什么,也就是怎么实现的,先看图
RocketMq一共有四个部分组成:NameServer,Broker,Producer生产者,Consumer消费者,每一部分都是集群部署的。
NameServer
NameServer是一个无状态的服务器,角色类似于Dubbo的Zookeeper,但比Zookeeper更轻量。
特点:
每个NameServer结点之间是相互独立,彼此没有任何信息交互。
Nameserver被设计成几乎是无状态的,通过部署多个结点来标识自己是一个伪集群,Producer在发送消息前从NameServer中获取Topic的路由信息也就是发往哪个Broker,Consumer也会定时从NameServer获取topic的路由信息,Broker在启动时会向NameServer注册,并定时进行心跳连接,且定时同步维护的Topic到NameServer。
功能主要有两个:
1、跟Broker结点保持长连接。
2、维护Topic的路由信息。
Broker
消息存储和中转角色,负责存储和转发消息。