转发数据到 ConsumerQueue 文件|学习笔记

简介: 快速学习转发数据到 ConsumerQueue 文件

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段):转发数据到 ConsumerQueue 文件】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12484


转发数据 ConsumerQueue 文件                            

                                           

数据更新到 ConsumerQueue 的一个基本流程。

去循环,调用两个 Dispatcher 。

public void doDispatch(DispatchRequest req){

for(CommitLogDispatcher dispatcher : this.dispatcherList)

{

dispatcher.dispatch(req);

}

}

分别是给 ConsumerQueen 去进行数据分发的 Dispatcher ,和给 index 进行数据分发的 Dispatcher 。

image.png进入给 ConsumerQueue 进行数据分发的类当中

image.png会通过 putMessagePositionInfo 方法去进行具体的数据分发的请求。

defaultMessageStore.this.putMessagePositionInfo(request);

public void putMessagePositionInfo(DispatchRequest dispatchRequest){

ConsumeQueue cq = this.findConsumeQueue(dispatchRequest.getTopic(),dispatchRequest.getQueueId())

Cq.putMessagePositionInfoWrapper(dispatchRequest);

}

发现第一行代码会根据消息主题和队列 ID 获得消息消费队列。现在给了一个消息队列 ConsumerQueue ,要去分发消息,所以先拿到当前这个主题 getTopic ,根据主题 ID getQueue 去拿到消息队列,然后再通过 putMessagePositionInfoWrapper  去处理当前的请求。

有一个循环,这个循环 maxRetries ,循环30次。

这里会将消息偏移量,消息长度, tag 写入到 ByteBuffer 缓冲区当中。前面的代码是做了一些检查的工作。

最核心的代码 putMessagePositionInfo ,在这里才真正进行数据的分发。点进去。

boolean result = this.putMessagePositionInfo(request.getCommitLogOffset(),

首先将消息偏移量,消息长度,tag 写到 byteBuffer 。

然后获得 mappedFile 的文件。

MappedFile mappedFile = this.mappedFileQueue.getLastMappedFile(expectLogicOffset);

通过 mappedFile 追加数据。

return mappedFile.appendMessage(this.byteBufferIndex.array());

数据已经写入到以下位置代码里。

this.byteBufferIndex.flip();

this.byteBufferIndex.limit(CQ_STORE_UNIT_SIZE);

this.byteBufferIndex.putLong(offset);

this.byteBufferIndex.putInt(size);

this.byteBufferIndex.putLong(tagsCode);

这就是给 ConsumerQueue 进行数据分发的基本的流程,也是通过内存映射的方式去进行磁盘写入。最终也拿到了 mappedFile 映射文件,然后追加在内存当中对应的数据。

以上是转发 ConsumerQueue 的基本流程。

相关文章
|
网络协议 芯片
|
4月前
|
前端开发 搜索推荐 Java
重定向和转发到底有啥区别?看这篇就够了!
在Web开发中,重定向和转发是常见操作,但它们有何不同?本文将详细解析重定向与转发的原理、区别及实际应用,帮助你在开发中更好地选择和使用这两种技术。
704 0
|
6月前
|
算法 网络协议 网络架构
【网络层】动态路由算法、自治系统AS、IP数据报格式
【网络层】动态路由算法、自治系统AS、IP数据报格式
63 0
|
网络架构
路由转发(详细理解+实例精讲)
本文详细的介绍路由转发,内含详细的实例解析,该文你值得拥有。
|
网络协议 安全 Unix
虚拟路由和转发 (VRF) 表上下文中的多点标签分发协议带内信令
本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已获互联网工程指导小组 (IESG) 批准出版。有关 Internet 标准的更多信息,请参见 RFC 5741 的第 2 节。
437 0
虚拟路由和转发 (VRF) 表上下文中的多点标签分发协议带内信令
|
网络架构
计算机网络学习20:IP数据报的发送和转发过程
如果C要给F发送数据报,那么如何知道F是不是跟自己在同一个网络呢?
计算机网络学习20:IP数据报的发送和转发过程
|
消息中间件 RocketMQ 开发者
转发 IndexFile 文件|学习笔记
快速学习转发 IndexFile 文件
转发 IndexFile 文件|学习笔记
|
存储 缓存 算法
内容分发网络 | 学习笔记
快速学习内容分发网络,介绍了内容分发网络系统机制, 以及在实际应用过程中如何使用。
内容分发网络 | 学习笔记
|
域名解析 存储 缓存
dns地址分发过程
为什么有dns,dns有什么用
dns地址分发过程
|
网络协议 物联网
DFP 数据转发协议应用实例
稳控科技编写的一套数据转发规则, 取自“自由转发协议 FFP(Free Forward Protocol)” ,或者 DFP(DoubleF Protocol), DF 也可以理解为 Datas Forward(数据转发)的缩写。DF 协议是与硬件接口无关的数据链路层协议,规定了数据流如何在不同设备之间、不同接口之间的传输方向。 DF 协议一般用于延长数字接口的传输距离(数据中继),它与硬件接口类型无关,可以基于 UART、 LoRA、TCP 等异步数据传输介质。
DFP 数据转发协议应用实例