# 《高性能Polaris网关》通用处理器-第02节:基于disruptor设计和实现BatchEvent模式的缓冲队列Holder

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本节重点:基于disruptor对网关的BatchEvent模式的缓冲队列Holder进行设计和实现,从全局角度掌握基于disruptor设计和实现BatchEvent模式的缓冲队列Holder思想。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

网关的过滤器链是通过处理器来驱动执行的,因此,处理器的性能好坏,对网关的整体性能有着至关重要的影响。目前,我们已经对网关处理器的顶层接口和核心实现类进行了设计和实现,对于网关的处理器来说,仅仅提供了核心实现是远远不够的,这无法很好的满足网关的性能要求。为此,我们需要为网关处理器进行缓冲队列设计,网关内置的缓冲队列包含BatchEvent模式(也叫Flusher模式)和MPMC模式(也叫多生产者多消费者模式)。本节,就先对BatchEvent模式的缓冲队列Holder进行设计和实现。

# 一、背景

在之前的文章中,我们已经对网关的顶级核心过滤器接口进行了设计和实现,也进一步封装了请求和响应的模型,基本上完成了过滤器的整体代码框架,并对网关过滤器的两大顶级抽象类进行了设计和实现,也对网关通用过滤器链进行了设计和实现。随后,对网关过滤器通用工厂类进行了设计和实现。

为了进一步提升过滤器的扩展性,对过滤器进行优化,使其适配自定义SPI。并且已经基于自定义SPI实现了负载均衡过滤器、超时配置过滤器、HTTP过滤器、RPC过滤器、指标分析过滤器、Mock过滤器、灰度过滤器。

截止到目前,我们已经通过SPI对网关内置的各种过滤器进行了设计实现。接下来,我们就要考虑如何驱动这些过滤器的执行。为此,在网关的整个架构设计中,我们引入了处理器,由处理器来驱动过滤器的执行,同时,也对网关处理器的顶层接口和核心实现类进行了设计和实现。

# 二、本节诉求

基于disruptor对网关的BatchEvent模式的缓冲队列Holder进行设计和实现,从全局角度掌握基于disruptor设计和实现BatchEvent模式的缓冲队列Holder思想。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

基于disruptor设计和实现BatchEvent模式的缓冲队列Holder的核心类实现关系如图2-1所示。


可以看到,基于disruptor设计和实现BatchEvent模式的缓冲队列Holder的核心类时,主要使用到了disruptor中的EventFactory接口、EventTranslatorOneArg接口、ExceptionHandler接口和WorkHandler接口。同时,在整个实现过程中,我们自己实现了Holder类来通过泛型封装event事件,也定义了事件监听器接口EventListener。

注意:这里重点给大家展示通用核心处理器,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

# 四、编码实现

本节,就基于disruptor对网关的BatchEvent模式的缓冲队列Holder类进行实现,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

(1)定义EventListener接口

EventListener接口是自定义的事件监听器接口,会在HolderWorkHandler和HolderExceptionHandler类中回调EventListener接口的方法。

源码详见:polaris-processor-api工程下的io.binghe.polaris.processor.api.concurrent.queue.batchevent.listener.EventListener。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码