【rocketmq学习笔记】rocketmq入门学习
基本介绍
rocketmq是阿里巴巴团队使用java语言开发的一款基于发布订阅模型的分布式消息队列中间件,是一款低延迟,高可用,拥有海量消息堆积能力和灵活拓展性的消息队列。
特点
- 可以实现集群无单点故障问题,节点高可用,水平可扩展;
- 支持消息存储,写入低延迟,支持实时消息查询;
- 支持上万个消息队列,性能高;
- 提供消息失败重试机制,可靠性高;
- 开源社区活跃性高,经受过阿里双十一考验,具备较高成熟度。
基本组件
下图是rocketmq的物理部署架构:
从上图可以知道,rocketmq由四大核心模块组成:producer、consumer、brokerServer、nameServer。其中brokerServer和nameServer是rocketmq的服务端,两者一起独立的对外提供服务;而producer和consumer可看做是rocketmq的客户端,一般依附于业务应用程序。下面对这四个组件进行分别介绍:
- NameSever
NameServer,一般称为名称服务器,是rocketmq中一个非常重要的组件,主要提供轻量级服务发现和路由功能,功能说明如下:
1.broker管理:NameServer负责接收Broker集群各个节点的注册信息,并定时提供心跳来检测集群中的Broker是否可用;
2.路由管理:NameServer 还负责保存和维护broker集群的路由元信息,broker的每次上下线都和nameServer通信,由nameServer来维护broker的路由信息,而producer和consumer通过访问nameServer获得对应broker的访问地址后,再向对应的broker发起请求。nameServer解除了broker和客户端的耦合依赖关系,大大提高了效率。 - BrokerServer
BrokerServer主要负责rocketmq中消息的接收,存储和转发,支持消息的push和pull模式,提供了极高的峰值处理能力和按照时间顺序存储数以百万记的消息存储能力,此外,它提供了灾难恢复、丰富的度量统计和警报机制,因此成为rocketmq中最核心的组件。 - Producer
Producer,顾名思义就是生产者,在Rocketmq中主要用来产生并发送消息,生产端可以使用producer来发送多种形式的消息到brokerServer, 然后由brokerServer统一进行分发。rocketmq的producer支持多种形式的消息发送,如同步消息发送、异步回调消息发送、顺序消息发送以及单向消息发送(异步无回调)。除了单向消息发送,其余的发送方式均需要brokerServer返回发送结果的确认消息。另外,相比其他MQ中间件,rocketmq的一个重要功能是支持发发送事务消息(半消息),该机制能一定程度上解决分布式事务的问题。 - Consumer
Consumer是消费者组件,负责消费producer发送的消息,它会从brokerServer获取消息并发送给应用程序,应用程序可以根据需要进行消费。Consumer支持两种消费模式,一种是推模式,这种模式下消息是由brokerServer主动推送给Consumer的,而拉模式则是Consumer定期去brokerServer拉取消息。
rocketmq使用的消费原语是At least Once, 即至少一次消费成功。如果一定时间内没有接收到consumer消息确认消费的响应结果,会将同一条消息再次投递给consumer。rocketmq采用ack机制保证消息的消费成功,所以consumer可能会多次收到同一条消息,需要consumer的业务方做好幂等防护。
基本概念
除了上述说明的基本组件,rocketmq中还有一些基本概念需要进行说明,掌握这些概念之后用户可以更好地理解rocketmq的设计理念。
- Topic
Topic即主题,在rocketmq中代表一系列消息的集合,属于一级消息类型,通常用于对消息进行初步分类。任何消息只能属于一个topic主题,主题是rocketmq进行消息发布订阅的最小单位。业务方可以通过创建并订阅各式各样的主题来满足自身的业务要求。不同主题之间的消息在逻辑上没有关联。 - Tag
Tag即标签,从属于Topic,用于在同一主题内部对消息进行进一步区分,标签可以简单的认为是二级主题,通过tag标签功能,业务方可以方便的实现对各种二级主题的消费需求,从而实现对消息的精确分类和消费。 - group
group,顾名思义就是组的意思,在rocketmq中代表着同一类客户端的集合。具体可分为消费者组(consumer group)和生产者组(producer group)两种。消费者组和生产者组之间没有任何关联(即使组名一样)。
1.消费者组:
消费者组代表着同一类型的消费者集群。同一消费者组内的消费者通常消费同样的消息且消息消费逻辑一致。消费者组的概念使得consumer集群在消费消息时,rocketmq可以通过负载均衡来做到消费消息时的高可用和容错。
2.生产者组:
类似地,生产者组代表同一类型的生产者集合,在rocketmq中生产者组可以实现事务消息的高可用性。 - message
message是rocketmq中消息传递的主体,每一条消息具有全局唯一的message ID, 用户可以根据message ID查询进行消息的精确查询。另外,message的内容可以是不超过rocketmq限制的任意二进制数据,rocketmq不会对消息承载的数据内容做任何干预。 - 集群模式
集群模式:对于任意一条被订阅的消息,同一消费者组下的节点只有一个节点对其进行消费;一个消费者组中的全部节点分摊所有消息。
消费示例图如下所示:
- 广播模式
广播模式:对于任意一条被订阅的消息,同一消费者组下的所有节点都会对其进行消费;一个消费者组中的全部节点都能接收到全量的消息。
消费示例图如下所示:
参考资料
https://www.cnblogs.com/ldy-blogs/p/10452422.html
https://blog.csdn.net/qq_37939251/article/details/84026365
https://www.cnblogs.com/xiaoxiongcanguan/p/11510366.html
人生若是只如初见