此页内容

07、什么是 Disruptor ?在项目中为什么要使用它,具体流程是什么?

497字约2分钟

2025-02-17

Disruptor 是 LMAX 公司开源的一个 高性能无锁环形队列 框架,常用于高并发、低延迟的消息处理场暑。它通过环形缓冲区+无锁(CAS +内存屏障)减少线程切换,来显著提升吞吐量。

在协同编辑中,后端 WebSocket原本同步接收和处理消息,若并发用户多、单条消息处理释时长,就易造成明赛,无法处理更多请求,引入 Disuptor 后,将消息生产与消息处理解耦:

  1. 原本的处理消息逻辑修改为 ”仅把消息提交到 Disruptor 队列“
  2. 由 Disruptor 的消费者线程异步取出并执行具体业务逻辑

项目中具体流程如下:

  1. 引入 Disruptor 依赖
  2. 定义事件,承载编辑请求、 WebSocket Session、用户信息等;
  3. 定义事件处理器,用于消费编辑事件并调用相应的业务逻辑;
  4. 在启动时初始化 Disruptor ,初始化固定大小的环形队列,把事件处理器加入消费者池;
  5. WebSocket 收到消息后,把它发布到 Disruptor 的环形队列;
  6. Disruptor 内部会多线程异步执行事件。

Disruptor 优雅停机

优雅停机指在应用关闭前,不再接收新的请求从等待系统中正在进行的任务全部完成后,才真正停止进程。确保数据和状态不会在停机时刻中断或丢失。

Disruptor 本身提供了优雅停机方法。可利用 Bean 的 PreDestroy 注解,在应用关闭前,先调用 disruptor.shutdown() ,然后 Disruptor 会等待环形队列内所有事件处理完才返回,同时拒绝所有新的编辑操作请求。等到队列内所有任务都消费完成,再关闭资源池和资源连接,最后退出应用。