RocketMQ 消费消息,源码里到底怎么跑?
很多人用 RocketMQ 消费消息,第一眼看到的代码都差不多: consumer.registerMessageListener((msgs, context) -> { // 处理业务逻辑 return …
继续阅读标签
共 5 篇
很多人用 RocketMQ 消费消息,第一眼看到的代码都差不多: consumer.registerMessageListener((msgs, context) -> { // 处理业务逻辑 return …
继续阅读上一篇从设计角度讲了 RocketMQ 存储的三个核心结论:全局顺序写、PageCache 押注、读写分离后台化。这篇我们把同一套逻辑放到源码里重走一遍,看看那些设计决策落地时到底长什么样。 写入主路径:一把锁守住顺序写 消息从 SendMessageProcessor 进来的第 …
继续阅读源码版本:2.5.0 在 Seata 中有三类角色,TC、RM、TM,Seata Server 作为 TC 协调分支事务的提交和回滚,各个资源作为 RM 和 TM,那么这三者之间是如何通信的呢?相信读完这篇文章之后,你就会知道答案。 整体类层次结构 我们先着眼大局,看一看 …
继续阅读1 问题背景 Redis 以内存存储和极低延迟著称,单机往往要同时承载成千上万条 TCP 连接。一个自然的工程问题是:为什么不采用「每个连接一个线程」的模型? 传统的一线程一连接方案,在连接数上升后会带来明显的线程切换和锁竞争成本。Redis 选择了另一条路:用少量线程配合 …
继续阅读AQS 是 Java 并发包的基础抽象框架,它将多线程同步的通用逻辑(如线程排队、阻塞、唤醒、状态原子性维护)进行了统一封装。基于这一框架,开发者能以极低的代码成本,高效地实现诸如 …
继续阅读