在v4版本的MyDisruptor实现多线程生产者后。按照计划,v5版本的MyDisruptor需要支持更便于用户使用的DSL风格的API。
由于这篇文章是一系列博客的一部分,我们需要了解前一篇博客的内容,以便更好地理解这篇博客。
[En]
Since the article is part of a series of blogs, we need to know the content of the previous blog in order to better understand this blog.
通过前面4个版本的迭代,MyDisruptor已经实现了disruptor的大多数功能。但对程序可读性有要求的读者可能会注意到,之前给出的demo示例代码中对于构建多个消费者之间的依赖关系时细节有点多。
构建一个有上游消费者依赖的EventProcessor消费者一般来说需要通过以下几步完成:
目前的版本中,每创建一个消费者都需要写一遍上述的模板代码。对于理解Disruptor原理的人来说还勉强能接受,但还是很繁琐且容易在细节上犯错,更遑论对disruptor底层不大了解的普通用户。
基于上述原因,disruptor提供了更加简单易用的DSL风格API,使得对disruptor底层各组件间交互不甚了解的用户也能很方便的使用disruptor,去构建不同消费者组间的依赖关系。
DSL即Domain Specific Language,领域特定语言。DSL是针对特定领域抽象出的一个特定语言,通过进一层的抽象来代替大量繁琐的通用代码段,如sql、shell等都是常见的dsl。
而DSL风格的API最大的特点就是接口的定义贴合业务场景,因此易于理解和使用。
首先要介绍的就是Disruptor类,disruptor类主要用于创建一个符合用户需求的RingBuffer,并提供一组易用的api以屏蔽底层组件交互的细节。
MyDisruptor类的构造函数有五个参数,分别是:
以上都是需要用户自定义或者指定的核心参数,构建好的disruptor的同时,也生成了RingBuffer和指定类型的生产者序列器。
```java
/**