Jiefang's Blog

过去心不可得,现在心不可得, 未来心不可得

RocketMQ-11丨消息拉取机制

消息拉取机制 消息消费以组的模式开展, 一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题,消费组之间有集群模式与广播模式两种消费模式。集群模式,主题下的同一条消息只允许被其中一个消费者消费。广播模式,主题下的同一条消息将被集群内的所有消费者消费一次。消息服务器与消费者之间的消息传送也有两种方式:推模式、拉模式。所谓的拉模式,是消费端主动发起拉消息请求,而推模式是消息到达消息服务器...

RocketMQ-10丨文件刷盘机制

文件刷盘机制 RocketMQ 的存储与读写是基于JDK NIO 的内存映射机制( MappedByteBuffer )的,消息存储时首先将消息追加到内存,再根据配置的刷盘策略在不同时间进行刷写磁盘。如果是同步刷盘,消息追加到内存后,将同步调用MappedByteBuffer 的force()方法;如果是异步刷盘,在消息追加到内存后立刻返回给消息发送端。RocketMQ 使用一个单独的线程...

架构设计-02丨IM即时通讯项目架构设计


架构设计-01丨秒杀系统架构设计


Shardingjdbc-01丨Shardingjdbc介绍


LeetCode-05丨146.LRU 缓存机制

146.LRU 缓存机制 问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 //运用你所掌握的数据结构,设计和实现一...

RocketMQ-09丨更新消费队列与索引文件

更新消费队列与索引文件 消息消费队列文件、消息属性索引文件都是基于CommitLog 文件构建的, 当消息生产者提交的消息存储在CommitLog 文件中, ConsumeQueue 、IndexFile 需要及时更新,否则消息无法及时被消费,根据消息属性查找消息也会出现较大延迟。RocketMQ 通过开启一个线程ReputMessageServcie 来准实时转发CommitLog 文件...

RocketMQ-08丨存储文件

存储文件 commitlog :消息存储目录; config :运行期间一些配置信息,主要包括下列信息; consumerFilter.json : 主题消息过滤信息; consumerOffset.json : 集群消费模式消息消费进度; delayOffset.json :延时消息队列拉取进度; s...

RocketMQ-07丨文件与内存映射

文件与内存映射 RocketMQ 通过使用内存映射文件来提高 IO 访问性能,无论是 CommitLog、ConsumeQueue、IndexFile ,单个文件都被设计为固定长度,如果一个文件写满以后再创建一个新文件,文件名就为该文件第一条消息对应的全局物理偏移量。 CommitLog文件的组织方式: 使用 MappedFile、MappedFileQueue 来封装存储文件: ...

RocketMQ-06丨消息存储

消息存储 消息存储 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 public class DefaultMessageStore...

RocketMQ-05丨消息发送

消息发送 RocketMQ 支持3 种消息发送方式:同步(sync) 、异步(async)、单向(oneway) 。 同步: 发送者向MQ 执行发送消息API 时,同步等待, 直到消息服务器返回发送结果。 异步: 发送者向MQ 执行发送消息API 时,指定消息发送成功后的回掉函数,然后调用消息发送API 后,立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或失败的回调...

RocketMQ-04丨NameServer架构设计

NameServer架构设计 Broker 消息服务器在启动时向所有Name Server 注册,消息生产者(Producer)在发送消息之前先从Name Server 获取Broker 服务器地址列表,然后根据负载算法从列表中选择一台消息服务器进行消息发送。NameServer 与每台Broker 服务器保持长连接,并间隔30s 检测Broker 是否存活,如果检测到Broker 右机,...

Dubbo-05丨线程模型

线程模型 Dubbo默认的底层网络通信使用的是Netty,服务提供方NettyServer使用两级线程池,其中EventLoopGroup(boss)主要用来接收客户端的链接请求,并把完成TCP三次握手的连接分发给EventLoopGroup(worker)来处理,注意把boss和worker线程组称为I/O线程,前者处理IO连接事件,后者处理IO读写事件。 设想下,dubbo prov...

Dubbo-04丨线程池

线程池 Dubbo里提供的线程池种类有: FixedThreadPool:创建一个具有固定个数线程的线程池。 LimitedThreadPool:创建一个线程池,这个线程池中的线程个数随着需要量动态增加,但是数量不超过配置的阈值。另外,空闲线程不会被回收,会一直存在。 EagerThreadPool:创建一个线程池,在这个线程池中,当所有核心线程都处于忙碌状态时,将创建新的...

Dubbo-03丨Dubbo SPI 扩展实现

Dubbo SPI 扩展实现 简介 Dubbo 的扩展点加载从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制加强而来。 Dubbo 改进了 JDK 标准的 SPI 的以下问题: JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。 如果扩展点加载失败,连扩展点...

LeetCode-05丨19.删除链表的倒数第N个结点

19.删除链表的倒数第 N 个结点 思路与算法 一种容易想到的方法是,我们首先从头节点开始对链表进行一次遍历,得到链表的长度 LL。随后我们再从头节点开始对链表进行一次遍历,当遍历到第 L-n+1L−n+1 个节点时,它就是我们需要删除的节点。 为了与题目中的 nn 保持一致,节点的编号从 11 开始,头节点为编号 11 的节点。 为了方便删除操作,我们可以从哑节点开始遍历 L-n+...

LeetCode-03丨206.反转链表

206.反转链表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * List...

网络编程-07丨Reactor线程模型

Reactor线程模型 Reactor模型的核心是:Reactor+Handles。Reactor在一个单独的线程中运行,负责监听和分发事件,将接收到的io事件交给不同的Handle来处理响应。Handles是处理程序执行I/O事件的实际操作,Reactor通过调度适当的Handles来处理io事件。 下面我们分别介绍这几种线程模型。 Reactor模型根据Reactor的数量和处理资源...

网络编程-06丨传统Socket网络编程

传统Socket网络编程 Server端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 ...

Netty-06丨传统Socket网络编程

传统Socket网络编程 Server端 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 ...