
0807【RocketMq】
文章平均质量分 54
主要包含大牛博客、视频学习笔记
努力的阳光蓝孩
学习一时爽,一直学习一直爽
展开
-
【RocketMq源码】九、 消息拉取
一、介绍1. 消息消费模式有两种模式:广播模式与集群模式。2. 广播模式比较简单,每一个消费者需要拉取订阅 主题下所有队列的消息。3. 在集群模式下,同一个消费者组内有多个消息消费 者,同一个主题存在多个消费队列,消费者通过负载均衡的方式消费消息。4. 消息队列负载均衡,通常的作法是一个消息队列在同一个时间只允许被一个消费消费者消费,一个 消息消费者可以同时消费多个消息队列。二、PullMessageService实现机制三、ProcessQueue实现机制Pro原创 2021-09-14 09:03:19 · 461 阅读 · 0 评论 -
【RocketMq源码】八、消息的消费
1. 检查消费者是否合法 checkGroup()生产组名称不能为空 、 生产者组的最大长度 255、判断命名规则("^[%|a-zA-Z0-9_-]+$";)2. 构建主题订阅信息3.设置消费者客户端实例名称为进程ID4.创建MQClient实例5. 构建rebalanceImpl 默认AllocateMessageQueueAveragely6. 消息消费广播模式,将消费进度保存在本地7. 消息消费集群模式,将消费进度保存在远端 Broker...原创 2021-09-14 08:58:46 · 131 阅读 · 0 评论 -
【RocketMq源码】七、消息队列和索引文件恢复
1)RocketMQ的存储文件包括消息文件(Commitlog)、消息消费队列文件(ConsumerQueue)、 Hash索引文件(IndexFile)、监测点文件(checkPoint)、abort(关闭异常文件)。2)单个消息存储文 件、消息消费队列文件、Hash索引文件长度固定以便使用内存映射机制进行文件的读写操作。 RocketMQ组织文件以文件的起始偏移量来命名文件,这样根据偏移量能快速定位到真实的物理文件。3)RocketMQ基于内存映射文件机制提供了同步刷盘和异步刷盘两...原创 2021-09-14 08:55:05 · 370 阅读 · 0 评论 -
【RocketMq源码】六、消息的存储
1. checkStoreStatus 状态是否正常1)判断Broker角色如果是从节点,则无需写入2)判断当前写入状态如果是正在写入,则不能继续3)判断系统PageCache缓存去是否占用2. checkMessag() 检查消息属性4) 判断消息主题长度是否超过最大限制 (2^7-1)5)判断消息属性长度是否超过限制(msg.getPropertiesString() != nul...原创 2021-09-14 08:43:20 · 118 阅读 · 0 评论 -
【RocketMq源码】五、消息的生产发送
画图工具参考: IDEA UML画图插件一、单条消息发送1. 发送消息,默认超时时间为3s2. 校验消息、校验消息体(是否为空、长度是否为0、是否大于发送的最大内容 默认4M)3. 从缓存中获得主题的路由信息、路由信息为空,则从NameServer获取路由、如果未找到当前主题的路由信息,则用默认主题继续查找4. 判断路由是否需要更改 新旧路由数据比较(TopicRouteData)5. 路由如果有变化 需要更新 updateTopicPublishInfo、upd...原创 2021-09-14 08:37:23 · 135 阅读 · 0 评论 -
【RocketMq源码】四、心跳处理、路由删除
一、心跳处理二、路由删除1)Broker 每隔30s向 NameServer 发送一个心跳包,心跳包包含 BrokerId , Broker 地址, Broker 名称, Broker 所属集群名称、 Broker 关联的 FilterServer 列表。2)如果 Broker 宕机, NameServer 无法收到心跳包,此时 NameServer 如何来剔除这些失效的 Broker 呢?3)NameServer 会 每隔10s扫描 brokerLiveTable 状态表,如果 .原创 2021-09-14 08:33:13 · 386 阅读 · 0 评论 -
【RocketMq源码】三、Broker 启动
1. 获取远程命令版本、设置NettySystemConfig.socketSndbufSize、NettySystemConfig.socketRcvbufSize 取不到值的话设置为131072(初始化的时候配置中没有值 默认值 65535)2. 设置监听端口10911 封装消息存储的配置信息 10911 用于与客户端的通信10912 用于与slave 的通信3. 创建brokerController 将配置写到properties (初始化、设置钩子函数...原创 2021-09-14 08:30:10 · 151 阅读 · 0 评论 -
【RocketMq源码】二、NameServer 启动流程
画图工具参考: IDEA UML画图插件 1 . 获取远程命令版本、解析命令行参数2. 创建NameSrvConfig 封装配置、创建NettyServerConfig 封装配置指定服务监听的端口号3. 查找NameSrvConfig的RocketmqHome没有则退出、创建NamesrvController4. 启动NamesrvController(初始化、添加钩子函数、启动NamesrvController)5. 初始化加载配置参数、创建 remotingServe..原创 2021-09-14 08:27:34 · 124 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记八、延时消息实现原理剖析
一、RocketMq延时消息1、RocketMq支持18个级别的延时等级,默认值为"1s 、5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h",生产者发送消息时通过设置delayLevel选择二、客户端调用1、消息体里设置延时属性,值为延时的级别public void setDelayTimeLevel(int level){ this.putProperty(MessageConst.PROPERTY_DELAY_TIME_原创 2020-06-06 17:38:28 · 233 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记七、延时需求业务场景分析及实现
一、延时需求场景1:延时需求:由业务场景或现实情况决定,需要在当前时候之后某一时间触发指定的业务逻辑或操作。2、即时通讯消息重发:IM系统为了确保消息触达接收方,消息发出几秒后没有收到ack,需要重发消息。3、订单状态流转:取消规定时间内未付款的订单商家发货后,长时间未确认的订单自动确认收货。4、外置索引更新:信息发布后外置索引更新相对滞后,立刻查询可能会查不到。二、解决方案1、Sleep:线程睡眠然后去处理:不靠谱2、定时扫描数据库的更新时间和创建时间1)增大数据库压力2)不精准3、实原创 2020-06-06 17:28:00 · 486 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记六、事务消息问题分析及定制开发实战
一、问题1、事务消息:业务侵入大2、延时消息:支持场景有限二、事务消息实现1)通过客户端实现2)事务消息表记录发消息事件3)本地事务保证业务数据与写消息表原子性4)事务管理器维护事务消息表扫库发送、清理a:1、2 本地事务b:3、4 消息投递c:5删除消息记录...原创 2020-06-06 15:26:26 · 244 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记五 、事务消息实现原理剖析
一、业务场景1、用户下单1)创建订单+减库存2、发布或更新商品信息1)写商品库+更新外置索引二、分布式事务1、强一致1)一致性协议2、两阶段提交2PC3、三阶段提交3PC4、落地方案 => XA规范1)资源管理器=> 事务参与者2)事务管理器=> 事务协调者5、柔性事务1)最终一致性方案2)TCC(Try-Confirm-Cancel)a:尝试执行业务,预留资源b: 确认执行业务,使用Try阶段资源c:取消执行业务,释放Try阶段预留的资源a:尝原创 2020-06-06 15:05:37 · 283 阅读 · 1 评论 -
【奈学教育】| 公开课RocketMq学习笔记四 、RocketMq基本了解、高可用及高扩展解决方案剖析
一、RocketMq功能特性1、支持事物型消息2、支持延时消息3、支持消息重发4、支持consumer端tag过滤5、支持消息回放二、RocketMq架构1、Broker主从部署,自身信息注册在NameServer中2、Client从NameServer中获取Broker信息3、NameServer节点相互独立,无数据交互三、特性分析1、可靠性分析1)同步刷盘:性能低,可靠性高2)异步刷盘:性能高,可靠性低2、可靠性分析1)异步复制:多Master、多Slave模式-异步原创 2020-06-04 23:57:54 · 722 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记三 、消息队列对比分析,为什么使用RocketMq
一、队列选型维度对比1、系统定位2、支持功能3、可用性4、可靠性5、运维二、RocketMq、kafka、RabbitMq对比1、基础对比2、可靠性、可用性对比3、功能对比4、分析1)Kafka:系统间的数据流通道(适合做大数据量对可靠性消息要求不是很严格)2)RocketMq:高性能可靠消息传输3)RabbitMq:可靠消息传输...原创 2020-06-04 23:23:59 · 242 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记二 、消息队列场景分析
一、消息队列的主要作用1、业务解决耦合2、异步调用3、流量消峰二、Mq解决耦合优点1、提升系统稳定性2、通过广播消息避免多次调用3、提高编码效率三、下单业务1、未用mq2、用Mq1)风控拦截2) 扣减库存3) 异步通知买家4)异步记录数据四、秒杀场景1、系统的吞吐量取决于底层存储服务的处理能力,数据访问层可以调整消费速度缓减存储服务压力,避免短暂的高峰将系统压垮。即大量请求突然压过来,导致服务器不工作了,五、总结1、使用消息队列带来很大的收益,但也会对系统架构造原创 2020-06-04 23:17:29 · 222 阅读 · 0 评论 -
【奈学教育】| 公开课RocketMq学习笔记一 、消息队列场景分析
一、消息队列1、在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响。2、场景分析一1)当天交易满3笔送5元红包2)连续登陆5天送10元红包3)新注册送5元红包4)运营活动可能需要在业务逻辑中各个环节加入运营活动逻辑,而且有时效性,频繁在正常业务逻辑中添加/删除代码显然不合理且分险大,需要测试支撑等,流程比较复杂。3、核心基础服务,可能各个业务线都会关注某些请求处理结果,不断修改代码添加向业务的通知不合理。.原创 2020-06-04 23:06:31 · 288 阅读 · 0 评论