一、简介
Disruptor
是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。由于其高性能,获得了很多大奖。
在美团技术团队它也有不少应用,有的项目架构借鉴了它的设计机制。
从数据结构上来看,Disruptor 是一个支持 生产者 -> 消费者
模式的 环形队列
。能够在 无锁 的条件下进行并行消费,也可以根据消费者之间的依赖关系进行先后消费次序。
二、代码
2.1 依赖
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
2.2 角色介绍
Event :事件类:生产者和消费者之间进行交换的数据被称为事件(Event)。
Producer: 生产者,用于发布事件。
Consumer :消费者(实现EventHandler接口):用于处理事件。
Disruptor通过事件工厂EventFactory在RingBuffer中预创建事件Event的实例。
一个事件实例Event类似于一个数据槽。
生产者Producer发布Publish之前,先从Ringbuffer中获取一个事件Event实例。
然后生产者Producer向事件Event实例中填充数据,然后再发布到RingBuffer中。
最后由消费者Consumer获取事件Event实例并读取实例中的数据。
2.3 事件类
/**
* @Author: LiuShihao
* @Date: 2022/11/23 14:39
* @Desc: 定义事件类:生产者和消费者之间进行交换的数据
*/
public class LogEvent {
//事件类工厂:引用new方法
public static final EventFactory<LogEvent> FACTORY = LogEvent::new;
private String data;
private Instant timestamp;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Instant getTimestamp()