编程语言
首页 > 编程语言> > 程序员

程序员

作者:互联网

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

《disruptor笔记》系列链接

  1. 快速入门
  2. Disruptor类分析
  3. 环形队列的基础操作(不用Disruptor类)
  4. 事件消费知识点小结
  5. 事件消费实战
  6. 常见场景
  7. 等待策略
  8. 知识点补充(终篇)

本篇概览

  1. 环形队列初始化
  2. 指定事件消费者
  3. 启动消费者线程
  1. 深入了解Disruptor类是如何完成上述操作的;
  2. 对Disruptor类有了足够了解时,尝试不用Disruptor,自己动手操作环形队列,实现消息的生产和消费,这样做的目的是加深对Disruptor内部的认识,做到知其所以然;

环形队列初始化

public Disruptor(final EventFactory<T> eventFactory, final int ringBufferSize, final ThreadFactory threadFactory)
    {
        this(RingBuffer.createMultiProducer(eventFactory, ringBufferSize), new BasicExecutor(threadFactory));
    }

在这里插入图片描述

指定事件消费者

disruptor.handleEventsWith(new StringEventHandler(eventCountPrinter));
public final EventHandlerGroup<T> handleEventsWith(final EventHandler<? super T>... handlers)
{
	return createEventProcessors(new Sequence[0], handlers);
}

在这里插入图片描述

在这里插入图片描述

  1. 创建SequenceBarrier对象,用于接收ringBuffer中的可消费事件
  2. 创建BatchEventProcessor,负责消费事件
  3. 绑定BatchEventProcessor对象的异常处理类
  4. 调用ringBuffer.addGatingSequences,将消费者的Sequence传给ringBuffer

启动消费者线程

disruptor.start();
    public RingBuffer<T> start()
    {
        checkOnlyStartedOnce();
        for (final ConsumerInfo consumerInfo : consumerRepository)
        {
            consumerInfo.start(executor);
        }

        return ringBuffer;
    }

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 启动独立线程,用来执行消费事件的业务逻辑;

消费事件的逻辑

在这里插入图片描述

总结

最后总结Disruptor类的重要功能:

  1. 创建环形队列(RingBuffer对象)
  2. 创建SequenceBarrier对象,用于接收ringBuffer中的可消费事件
  3. 创建BatchEventProcessor,负责消费事件
  4. 绑定BatchEventProcessor对象的异常处理类
  5. 调用ringBuffer.addGatingSequences,将消费者的Sequence传给ringBuffer
  6. 启动独立线程,用来执行消费事件的业务逻辑

理解官方流程图

在这里插入图片描述

后续预告

  1. 100个事件,单个消费者消费;
  2. 100个事件,三个消费者,每个都独自消费这个100个事件;
  3. 100个事件,三个消费者共同消费这个100个事件;

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

标签:Disruptor,消费,RingBuffer,start,程序员,事件,ringBuffer
来源: https://www.cnblogs.com/123456zhang/p/15334574.html