网站首页 > 博客文章 正文
大家好,我是mikechen。
消息中间件是亿级互联网架构的基石,其中最典型有“RocketMQ”消息中间件,大厂最爱考察的内容,下面我就全面来详解RocketMQ@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
RocketMQ
RocketMQ是一款开源的分布式消息中间件,具有高吞吐量、低延迟和高可靠性的特点。
主要解决,如下4大场景:
1、应用解耦
通过消息队列将生产者、和消费者解耦,比如:电商平台中,用户下单后,物流服务...等,可以通过消息队列解耦,彼此独立处理自己的业务逻辑。
2、异步通信
在系统间传递消息时,生产者发送消息后,不需要立即等待消费者处理完毕,而是可以继续执行其他操作,这样可以提高系统的响应速度、和吞吐量。
3、削峰填谷
最典型的就是:阿里双11,秒杀活动中,用户的抢购请求通过消息队列暂存,这就是典型的“削峰填谷”,避免因为瞬时高并发导致数据库压力过大。
4、消息广播
支持消息的多播,便于实现通知、和广播功能,比如:系统监控报警,当发现系统异常时,报警消息通过消息队列广播多个。
RocketMQ原理
架构和组件
RocketMQ架构,如下图所示:
RocketMQ架构:主要由NameServer、Broker、Producer以及Consumer四部分构成。
1.NameServer
提供命名服务,负责管理Topic和Broker的元数据信息。
要包括两个功能,如下图所示:
1)Broker管理
- NameServer接受Broker集群的注册信息,并且保存下来作为路由信息的基本数据;
- 然后提供心跳检测机制,检查Broker是否还存活;
2)路由信息管理
每个NameServer将保存关于Broker集群的整个路由信息,Producer和Conumser通过NameServer,就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。
2.Broker
消息中间件的服务器,负责存储和传递消息。
如下图所示:
Broker的核心功能包含:
- 接收 Producer 发过来的消息;
- 处理 Consumer 的消费消息请求;
- 消息的持 久化存储;
- 消息的 HA 机制;
- 服务端过滤功能等 。
3.Producer
消息的生产者,负责发送消息到Broker。
生产者发送消息时,先与Namesrv交互获取Broker信息,然后与Broker建立连接发送消息。
如下图所示:
- Producer创建消息时,需要指定消息的主题(Topic)、标签(Tag)和消息体(Body)等内容。
- 主题用于对消息进行分类和归类,标签用于对消息进行更细粒度的过滤和筛选。
- 消息体是实际的业务数据。
4.Consumer
消息的消费者,负责从Broker订阅并消费消息。
如下图所示:
消费者通过与Namesrv交互获取Broker信息,并根据主题和队列进行消息订阅。
消费者从Broker拉取消息进行消费,可以设置消费模式(顺序消费或并发消费)和消费进度。
消息存储
RocketMQ采用顺序写磁盘的方式持久化消息,以保证高吞吐量和消息的持久性。
消息存储在CommitLog文件中,其中包含了消息的主题、标签、属性等信息。
消息索引存储在Index文件中,用于快速查找消息。
消息的顺序性保证
RocketMQ支持顺序消费,在同一个队列上的消息按照发送顺序被消费。
对于全局有序的场景,可以将消息发送到同一个队列中。
对于局部有序的场景,可以将消息发送到多个队列中,并在消费端根据消息的某个关键属性进行排序。
高可用和容错性
RocketMQ通过主从复制机制实现高可用性和容错性。
Broker集群中的每个主节点都有相应的备份节点,当主节点出现故障时,备份节点可以接管服务。
Namesrv也可以配置为集群模式,提供高可用性和容错性。
消息的事务性
RocketMQ支持消息的事务性,允许生产者发送带有事务标记的消息。
生产者发送事务消息时,会先执行本地事务,然后根据事务结果提交或回滚消息。
事务消息的状态和进度由Broker和生产者共同管理和维护。
以上
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
- 上一篇: RocketMQ源码剖析系列(一)
- 下一篇: RocketMQ内存传输及4.7消费线程参数设置
猜你喜欢
- 2024-12-12 RocketMQ同一个消费者唯一Topic多个tag踩坑经历
- 2024-12-12 RocketMQ——RocketMQ搭建及问题解决
- 2024-12-12 腾讯云微服务正式发布RocketMQ Serverless版本
- 2024-12-12 3分钟白话RocketMQ系列—— 核心概念
- 2024-12-12 RocketMQ如何避免未来再次发生积压
- 2024-12-12 rocketmq延迟消息实现原理(上)
- 2024-12-12 RocketMQ跨队列的顺序消费
- 2024-12-12 Kafka、RabbitMQ、RocketMQ、ActiveMQ 等多个分布式消息队列比较
- 2024-12-12 应如何在 Spring Boot 中使用 RocketMQ 实现批量消息消费?
- 2024-12-12 RocketMQ 5.0 多语言客户端的设计与实现
你 发表评论:
欢迎- 08-03 Docker 命令入门实战:搞懂这些才算真正入门!
- 08-03Docker 常用命令分类汇总
- 08-03docker常用命令大全,看这一篇就够了
- 08-03Docker命令大全详解(39个常用命令)
- 08-03Docker 常用命令手册
- 08-03Docker命令最全详解(39个最常用命令)
- 08-03Docker命令最全详解(29个最常用命令)
- 08-03C++语法进阶-字符:字符变量(char)
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)