摘要: 如果一个broker正常退出,是会删除abort文件的。那么启动broker的时候发现abort文件还存在,那么说明上次是异常终止,会进入到commit-log的recoverAbnormally逻辑里面,因为所有其他的信息都是从commit-log获取到的,所以追根溯源只能从commit-log开 阅读全文
posted @ 2019-12-08 22:28 notlate 阅读(1020) 评论(3) 推荐(0) 编辑
摘要: 首先解释下consumeQueue,由于commit-log是根据消息先后存储的,而我们消费的时候是根据topic来筛选的,所以需要一个队列根据topic来划分,所以consumeQueue就是干这个事情的。而indexfile顾名思义就是索引文件,用来做单纯查询的。 private final C 阅读全文
posted @ 2019-12-08 22:25 notlate 阅读(636) 评论(1) 推荐(0) 编辑
摘要: 生产者发送一条消息的时候,在主broker里面最终会运行到: PutMessageResult result = this.commitLog.putMessage(msg); 在这里第一次有了锁,也就是发送一条消息,一路行都没有锁,直到这里涉及mappedfile的时候才有锁。因为要保证消息有序性 阅读全文
posted @ 2019-12-08 21:09 notlate 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 新增topic是需要客户端直接通知broker完成的: 通过createAndUpdateTopicConfig方法 发送给broker以后,在AdminBrokerProcessor里面负责处理这个类型消息: 在updateTopicConfig方法: TopicConfig是复写了equal方法 阅读全文
posted @ 2019-12-08 20:21 notlate 阅读(8192) 评论(0) 推荐(0) 编辑
摘要: 首先看一下RemotingCommand的几个重要属性: 除了static之外,还有body、extfields是transitent,除此之外都是要直接进行序列化的,默认用fastjson直接序列化。 这里面的extfields跟customHeader是互相转换的,也就是序列化的时候用前者传入, 阅读全文
posted @ 2019-12-08 20:15 notlate 阅读(2969) 评论(0) 推荐(0) 编辑