2025年1月24日

摘要: commitlog管理文件,通过MappedFileQueue管理一个MappedFile列表,用的是RandomAccessFile和堆外内存MappedByteBuffer(零拷贝,更快)。 commitlog本身是顺序写,broker收到的所有message,一个一个的拼到后面,因为每个Map 阅读全文
posted @ 2025-01-24 21:06 chuliang 阅读(3) 评论(0) 推荐(0) 编辑
 

2025年1月1日

摘要: return Flux.fromIterable(this.handlerMappings) .concatMap(mapping -> mapping.getHandler(exchange)) .next() .switchIfEmpty(createNotFoundError()) .flat 阅读全文
posted @ 2025-01-01 11:10 chuliang 阅读(5) 评论(0) 推荐(0) 编辑
 

2024年2月15日

摘要: 为什么客户端这边瞬间发起多个请求,响应会丝毫不差的对应到多个请求上,不会发生错位呢?主要还是需要客户端来负责,指望服务端是不现实的。当然如果客户端和服务端都是自己的,那么就更灵活了。 rocketMQ是netty,用requestId,一个channel。 redisson也是netty,24个ch 阅读全文
posted @ 2024-02-15 21:43 chuliang 阅读(21) 评论(0) 推荐(0) 编辑
 

2022年9月18日

摘要: 客户端(包含生产者和消费者)定时任务里updateTopicRouteInfoFromNameServer方法,定时向nameService获取topic(当前客户端所包含的所有消费者者消费的和生产者要发送的)的信息 对于一个topic来说,可能会在多个broker上有队列,所以broker信息会是 阅读全文
posted @ 2022-09-18 21:43 chuliang 阅读(150) 评论(0) 推荐(0) 编辑
 

2022年4月7日

摘要: orderly:1、SUSPEND_CURRENT_QUEUE_A_MOMENT:在本地重试,先判断重新消费次数有没有达到最大值(consumer定义的时候传入,不传为Integer最大值),如果没达到,重试次数+1,放入消费池,1秒(默认)之后再消费,直到达到最大消费次数。发送到重试队列(这个时候 阅读全文
posted @ 2022-04-07 01:25 chuliang 阅读(1468) 评论(0) 推荐(0) 编辑
 

2021年10月10日

摘要: broker定时向namesrv 注册,会告诉namesrv自己的brokername、brokeraddress、topic+队列数量信息等,namesrv会把topic的信息放到topicQueueTable(只有版本号改变才修改,broker只有topic信息发生改变了才改变版本号)中,同一个 阅读全文
posted @ 2021-10-10 22:08 chuliang 阅读(73) 评论(0) 推荐(0) 编辑
 

2021年8月22日

摘要: indexFile(索引文件)和 ConsumeQueue(消费队列),都是为了更快的查找而建立的索引,后者是根据topic,前者是根据key。在ReputMessageService(一个ServiceThread的实现类)的doReput方法中, 会循环遍历每一条新收到的消息, DefaultM 阅读全文
posted @ 2021-08-22 18:59 chuliang 阅读(205) 评论(0) 推荐(0) 编辑
 

2021年6月14日

摘要: 权限控制初步: 官网是这样启动broker: nohup sh bin/mqbroker -n localhost:9876 & 在阿里云部署的时候,namesrv给producer的是局域网地址,所以要在启动的时候绑定外网ip,broker启动时候源码中是从 -c 参数指定的文件(broker.c 阅读全文
posted @ 2021-06-14 22:26 chuliang 阅读(207) 评论(0) 推荐(0) 编辑
 

2021年5月29日

摘要: 在RequestMappingHandlerAdapter.afterPropertiesSet >getDefaultArgumentResolvers方法中,先往argumentResolvers属性中添加默认的一批去处理有注解的参数,再添加一批处理特定对象类型的参数,此时还剩下的就是其他对象类 阅读全文
posted @ 2021-05-29 11:06 chuliang 阅读(285) 评论(0) 推荐(0) 编辑
 

2020年11月15日

摘要: vm.init,先为computed变量(假设是age,并在computed方法中依赖于另一个变量vm.factor)初始化,age会关联一个watcher(假设为cWatcher,lazy为true),vm.age的get方法被重写,cWatcher的dirty属性被置为true。其getter属 阅读全文
posted @ 2020-11-15 16:36 chuliang 阅读(1631) 评论(0) 推荐(0) 编辑