Rocketmq 源码分析(一)消息发送

@

整体架构

在这里插入图片描述

nameserver : 存放 broker (服务代理)
broker : 服务代理
可以看到nameserver只是负责管理broker 的,提供broker的查找以及存储。而broker是服务代理,处理消息的接口以及转发,使用netty 作为消息的处理。

消息发送

在这里插入图片描述
从例子中可以看到 需要先设置下nameserver ,我们看下send方法,
在这里插入图片描述

这个类DefaultMQProducerImpl 负责处理消息的发送
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

看到这里我们往下面看。

在这里插入图片描述

在这里插入图片描述
可以看到它的请求命令就是RequestCode.SEND_MESSAGE,

看到这里大概提下,在broker启动初始化的时候对每一种命令注入对应的处理器。

在这里插入图片描述

在这里插入图片描述

可以看到它的处理器就是SendMessageProcessor。

看到这里可能有点蒙,rocketmq发动消息到哪里去了?如果写过netty 的同学都知道,这时一般都serverhandler接口消息进行处理,也就是还是回到borker中看到 nettyserver hander怎么处理的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
看到这里我们进入下,可以明确的知道调用上面我们提到的SendMessageProcessor

在这里插入图片描述

在这里插入图片描述

看到putmessage相信所有的小伙伴都知道了,在这里写入消息到文件中,

在这里插入图片描述

在这里插入图片描述

有些同学会问这是把数据写到bytebuffer并没有写入到文件中去,我们继续看下CommitLog的构造方法,
在这里插入图片描述

这个定时任务的run方法
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
看到这里通过filechannel把bytebuffer写入到文件中去了。,

那定时何时调用的呢,
在这里插入图片描述

又是start方法。,这时估计我们都猜到了,在broker的start方法中启动的。

posted @ 2020-08-07 14:36  manongyangjia  阅读(191)  评论(0编辑  收藏  举报