博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
disruptor 入门 一
阅读量:6735 次
发布时间:2019-06-25

本文共 3020 字,大约阅读时间需要 10 分钟。

一、disruptor基本概念

 

二、disruptor入门程序

导入disruptor包

com.lmax
disruptor
3.3.2

 

实现disruptor的四部操作

1.建立一个工厂Event类,用于创建Event类实例对象

public class OrderEvent {    private long value;    public long getValue() {        return value;    }    public void setValue(long value) {        this.value = value;    }}
public class OrderEventFactory implements EventFactory
{ @Override public OrderEvent newInstance() { return new OrderEvent(); //这个方法就是为了返回空的数据对象Event }}

 

2.创建事件监听类,用于处理数据

import com.lmax.disruptor.EventHandler;public class OrderEventHandler implements EventHandler
{ @Override public void onEvent(OrderEvent orderEvent, long l, boolean b) throws Exception { System.out.println("消费者:"+orderEvent.getValue()); }}

 

3.实例化Disruptor实例,配置一系列的参数,编写Disruptory核心组件

public static void main(String[] args) {        OrderEventFactory orderEventFactory = new OrderEventFactory();        int ringBufferSize = 1024 * 1024;//指定容器的大小        ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); //指定线程,建议使用自定义线程池        /**         * 1.实例化disruptor对象         * 参数一:orderEventFactory 消息(event)工厂对象         * 参数二:ringBufferSize 容器的长度         * 参数三:线程池(建议使用自定义线程池)RejectedExecutionHandler         * 参数四:ProducerType 单生产者还是多生产者         * 参数五:waitStrategy 等待策略         */        Disruptor
disruptor = new Disruptor
(orderEventFactory, ringBufferSize, executorService, ProducerType.SINGLE, new BlockingWaitStrategy()); //2.添加消费者的监听 disruptor.handleEventsWith(new OrderEventHandler()); //3.启动disruptor disruptor.start(); //4.获取实际存储数据的容器: RingBuffer RingBuffer
ringBuffer = disruptor.getRingBuffer(); OrderEventProducer producer = new OrderEventProducer(ringBuffer); ByteBuffer byteBuffer = ByteBuffer.allocate(8); for (long i = 0; i < 100; i++) { byteBuffer.putLong(0, i); producer.sendData(byteBuffer); } disruptor.shutdown(); executorService.shutdown(); }

 

4.编写生产者组件,向Disruptor容器中去投递数据 (此步骤对应上述main方法中的4)

import com.lmax.disruptor.RingBuffer;import java.nio.ByteBuffer;public class OrderEventProducer {    private RingBuffer
ringBuffer; public OrderEventProducer(RingBuffer
ringBuffer) { this.ringBuffer = ringBuffer; } public void sendData(ByteBuffer data) { //1 在生产者发送消息的时候,首先需要从 ringBuffer 中获取一个可用的序号 long sequence = ringBuffer.next(); try { //2 根据这个序号找到具体的 OrderEvent 元素,草地上获取的OrderEvent对象是一个没有被赋值的空对象 OrderEvent orderEvent = ringBuffer.get(sequence); //3 进行时间赋值处理 orderEvent.setValue(data.getLong(0)); } finally { //4 提交操作 ringBuffer.publish(sequence); } }}

 

转载于:https://www.cnblogs.com/gyli20170901/p/10233170.html

你可能感兴趣的文章
通读ES6--数值的扩展
查看>>
Flink实时计算性能分析
查看>>
参加51CTO学院软考培训,我通过啦
查看>>
阿里云梁楹:这样的青春,别样的精彩
查看>>
Pandas - 快速入门
查看>>
通过java流实现读取文件
查看>>
Log4j 基本使用
查看>>
ssh 通过sshpass自动登录远程主机
查看>>
Eclipse/MyEclipse 常用的快捷键
查看>>
wordpress获取当前分类下的子分类
查看>>
解决Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
RecyclerView和LinearLayoutManager经常用到的几个方法
查看>>
Apache虚拟主机
查看>>
GC策略
查看>>
互联力量Silverlight Grid控件常见用法
查看>>
Netxms客户端工程环境配置
查看>>
dhcp和中继代理服务
查看>>
如何调整实例恢复时间
查看>>
SliverLight 之Sample
查看>>
你的吻
查看>>