从零开始实现lmax-Disruptor队列(五)Disruptor DSL风格API原理解析

Java30

在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
/**

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

冒泡排序

冒泡排序 原理 每一次遍历序列,只能确定一个元素的正确位置 第一次将末位元素归位,第二次将倒数第二位元素归位... 设(n)个元素排序,只需要将(n-1)个元素归位 每一次比较相邻元素,若相邻元素逆序...
Java

Java(8)数组

数组 数组存储相同类型值的序列。 声明数组 数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标(index,或称索引)可以访问数组中的每一个值。例如,如果a是一个整型数组, a[i]就是数...
Java

记一次base64转MultipartFile的坑

记一次base64转MultipartFile的坑 现在有个需求是接收base64编码的图片,然后上传到文件服务器上,由于文件服务的代码是固定的代码不能修改,所以只能适配接口。文件服务代码如下: @F...
Java

高速缓存一致性协议MESI与内存屏障

CPU高速缓存机制的引入,主要是为了解决CPU越来越快的运行速度与相对较慢的主存访问速度的矛盾。CPU中的寄存器数量有限,在执行内存寻址指令时,经常需要从内存中读取指令所需的数据或是将寄存器中的数据写...
Java

MySQL中的WHERE和HAVING

使用 GROUP BY语句时,有时会同时使用 WHERE和 HAVING,常常会因为搞不清楚要用哪个而写错,这里记录一下 TL;NRs WEHRE语句必须在 GROUP BY之前,用于对表中数据进行筛...
Java

从零玩转人脸识别之RGB人脸活体检测

从零玩转RGB人脸活体检测 前言 本期教程人脸识别第三方平台为虹软科技,本文章讲解的是人脸识别RGB活体追踪技术,免费的功能很多可以自行搭配,希望在你看完本章课程有所收获。 ArcFace 离线SDK...
Java

微服务入门之config+bus

一、前言 1.1、分布式面临的问题 微服务意味着将单个应用程序中的业务拆分为子服务。每个服务的粒度相对较小,因此系统中会有大量的服务。由于每个服务都需要必要的配置信息才能运行,因此集中式和动态配置管理...
Java

web监听器解析

监听器是web三大组件之一,事件监听机制如下: 事件:某个事件,如果初始化上下文 事件源:事件发生的地方 监听器:一个对象,拥有需要执行的逻辑 注册监听:将事件、事件源、监听器绑定在一起。当从事件源发...
Java

设计模式之状态模式

在实际开发中,订单往往包含订单状态,用户每次操作都要切换相应的状态,每次切换判断当前状态都是必要的,难免会引入一系列判断语句。为了让代码更清晰直观,我们引入了今天的主角国家模式。[En]In actu...
Java

阿里面试:dubbo的服务引用过程

上篇文章我们已经了解了 Dubbo 服务暴露全过程,这篇文章我就带着大家再来看看 Dubbo 服务引入全流程,这篇服务引入写完下一篇就要来个全链路打通了,看看大家看完会不会有种任督二脉都被打通的感觉。...
Java

都是中文用户名惹的祸~

进入公司遇到的第一个棘手BUG; 在数据库连接和配置正确的前提下,服务无法启动,控制台上报如下错误:[En]Under the premise that the database connection...