构建Disruptor实例-生产消费模型完成整个入门示例
1、初始化Disruptor,构建Disruptor只要需要以下几个参数
1 eventFactory: 消息(event)工厂对象
2 ringBufferSize: 容器的长度
3 executor: 线程池(建议使用自定义线程池) RejectedExecutionHandler
4 ProducerType: 单生产者 还是 多生产者
5 waitStrategy: 等待策略
示例代码:
Disruptor<OrderEvent> disruptor = new Disruptor<>(orderEventFactory, ringBufferSize, executor, ProducerType.SINGLE, new BlockingWaitStrategy());
2、初始化好Disruptor之后,通过该对象的handleEventsWith添加消费者的监听
3、然后启动Disruptor实例
4、往RingBuffer中生产数据,完成生产消费模型
具体代码如下:
package com656463.quickstart; import java.nio.ByteBuffer; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.lmax.disruptor.BlockingWaitStrategy; import com.lmax.disruptor.RingBuffer; import com.lmax.disruptor.dsl.Disruptor; import com.lmax.disruptor.dsl.ProducerType; public class Main { public static void main(String[] args) { // 参数准备工作 OrderEventFactory orderEventFactory = new OrderEventFactory(); int ringBufferSize = 4; ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); /** * 1 eventFactory: 消息(event)工厂对象 * 2 ringBufferSize: 容器的长度 * 3 executor: 线程池(建议使用自定义线程池) RejectedExecutionHandler * 4 ProducerType: 单生产者 还是 多生产者 * 5 waitStrategy: 等待策略 */ //1. 实例化disruptor对象 Disruptor<OrderEvent> disruptor = new Disruptor<>(orderEventFactory, ringBufferSize, executor, ProducerType.SINGLE, new BlockingWaitStrategy()); //2. 添加消费者的监听 (构建disruptor 与 消费者的一个关联关系) disruptor.handleEventsWith(new OrderEventHandler()); //3. 启动disruptor disruptor.start(); //4. 获取实际存储数据的容器: RingBuffer RingBuffer<OrderEvent> ringBuffer = disruptor.getRingBuffer(); OrderEventProducer producer = new OrderEventProducer(ringBuffer); ByteBuffer bb = ByteBuffer.allocate(8); for (long i = 0; i < 5; i++) { bb.putLong(0, i); producer.sendData(bb); } disruptor.shutdown(); executor.shutdown(); } }
整个Disruptor的入门程序完成,接下来深入理解Disruptor核心API
2019-05-20 23:30
Disruptor快速入门
开源项目
知识点
相关教程
更多数据生产者向disruptor容器RingBuffer中推送数据
RingBuffer是disruptor中不同的上下文(线程)之间传递数据的buffer,以下是数据生产者向disruptor容器RingBuffer中推送数据示例
如何构建高效的storm计算模型
计算机制简介 Storm采用流式计算的模型,和shell类似让数据在一个个“管道”中进行处理。 Spout负责从数据源拉取数据,相当于整个系统的生产者。 Bolt负责消费数据并将tuple发送给下一个计算单元。Bolt可以接受多个spout和bolt的数据。 每个spout,bolt可以设置并行度excuter相当于多进程,每个excuter可以设置多个task shuffle groupi
Disruptor实现EventFactory接口创建实例对象
创建具体实体类,实现 EventFactory 工厂类接口,重写newInstance方法,在此方法中创建对象
ACTIVEMQ Topic消息 生产者 发布消息后 消费者收不到消息
生产者public class Producer { public static void main(String[] args) throws JMSException { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Spring boot入门实例
入门实例是基于maven工程,主要配置: spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s
Struts2 入门示例
Shiro入门示例教程
如果您想要用户在应用程序的当前会话期间使用户可用
JSF快速入门示例
JSoup入门示例
//jsoup.org/ 
XStream快速入门示例
stringBuilder.append("Student 
Kotlin 基于Eclipse 的入门示例
vue 入门实例
第六章 注解式控制器详解(SpringMVC3.1新特性:生产者、消费者请求限定)——跟着开涛学SpringMVC
6.6.5、生产者、消费者限定6.6.5.1、基本概念 首先让我们看一下通过HTTP协议传输的媒体类型及如何表示媒体类型:一、Media Type:互联网媒体类型,一般就是我们所说的MIME类型,用来确定请求的内容类型或响应的内容类型。
使用java操作redis入门示例
使用java操作redis比较热门的是使用 jedis 首先把jedis添加到pom.xml中 使用java操作redis入门示例 本示例参考网络
Activiti入门程序-启动流程实例
RuntimeService:执行管理,包括启动、推进、删除流程实例等操作 RuntimeService是activiti的流程执行服务类。可以从这个服务类中获取很多关于流程执行相关的信息 调用processEngine的getRuntimeService方法获取RuntimeService对象 调用RuntimeService的相关方法可以启动流程实例有以下方法 启动流程实例示例程序: /*
最新教程
更多java线程状态详解(6种)
java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞
redis从库只读设置-redis集群管理
默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave. 127.0.0.1:6382> set k3 111 (error) READONLY You can't write against a read only slave. 如果你要开启从库
Netty环境配置
netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。
Netty基于流的传输处理
在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据
Netty入门实例-使用POJO代替ByteBuf
使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。
Netty入门实例-时间服务器
Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现
Netty入门实例-编写服务器端程序
channelRead()处理程序方法实现如下
Netty开发环境配置
最新版本的Netty 4.x和JDK 1.6及更高版本
电商平台数据库设计
电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表
HttpClient 上传文件
我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。
MongoDB常用命令
查看当前使用的数据库 > db test 切换数据库 > use foobar switched to db foobar 插入文档 > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new
快速了解MongoDB【基本概念与体系结构】
什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
windows系统安装MongoDB
安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我
Spring boot整合MyBatis-Plus 之二:增删改查
基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baom
分布式ID生成器【snowflake雪花算法】
基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案