前言
前几篇都是基于RockeMQ的工具类的源码来分析其架构,功能等,本节从RocketMQ的存储方面来分析,RocketMQ是如何实现回调,高可用的,这里引入一篇总结不错的文章.
消息追加的回调方法AppendCallback
这个的追加的消息体分为批量的以及单一的消息体两种方式,都是实现了MessageExt类,而MessageExt继承了Message的基类,包括定义了消息的offset,queueID,storeSize等重要信息,而对于批量核心的方法是wrap()对批量的消息存放到byteBuffer,实现批量的处理。具体的源码如下
public class MessageExtBatch extends MessageExt {
private static final long serialVersionUID = -2353110995348498537L;
public ByteBuffer wrap() {
assert getBody() != null;
return ByteBuffer.wrap(getBody(), 0, getBody().length);
}
private ByteBuffer encodedBuff;
public ByteBuffer getEncodedBuff() {
return en