- 这是hmily的一个核心,hmily之所以高效就是因为hmily把日志的存储维护操作及confirm,cancel的操作通过Disruptor的异步任务框架的方式执行。关于disruptor的原理如下,我没怎么研究过。后我主要分析hmily是如何使用Disruptor这个框架。
1. DisruptorProvider
- Disruptor队列提供者。DisruptorProvider实例里面维护了一个Disruptor队列实例ringBuffer。实际上DisruptorProvider的作用就是封装了一下ringBuffer队列,并提供统一的发布入口。也就是生产者调用的入口。
- 首先新建DisruptorProvider实例的时候就传入了一个ringBuffer实例,生产者通过调用data方法将任务发布到ringBuffer上。
- 简单说一下data函数。这是Disruptor 框架发布事件的逻辑,分为三个步骤
- 先从 RingBuffer 获取下一个可以写入的事件的序号;
- 获取对应的事件对象,将业务信息写入事件对象;事件对象Disruptor 要我们自定义,如下hmily定义了一个DataEvent类作为事件对象。事件对象只是一个载体,在生产者生成任务与消费者消费任务时,并不新增与销毁事件对象。事件对象内存储的才是真实被生产(/消费)的业务信息。
- 将事件提交到 RingBuffer;后面消费者就会读取到该position,处理该业务信息。
2. DisruptorProviderManage
-
队列管理者。该类负责创建DisruptorProvider实例,也就是Disruptor队列,并提供与维护该队列。可以说如果有一个DisruptorProviderManage实例创建,那么就会有一个Disruptor任务队列。
-
DisruptorProviderManage也是泛型的,它的泛型同DisruptorProvider的泛型一致,是指向被生成与消费业务信息类。
-
这里可以先说一下,每一个加入himly框架的微服务,在启动后都会创建两个DisruptorProviderManage实例,对应的两