Disruptor 实例
来源:互联网 发布:php集成开发工具 编辑:程序博客网 时间:2024/06/06 17:31
如图:
从中图可以看出需求是介样子的:生产者生产数据经过C1,C2处理完成后再到C3。假设如下场景:1、交易网关收到交易(P1)把交易数据发到RingBuffer中,2、负责处理增值业务的消费者C1和负责数据存储的消费者C2负责处理交易3、负责发送JMS消息的消费者C3在C1和C2处理完成后再进行处理。
import com.lmax.disruptor.BusySpinWaitStrategy;import com.lmax.disruptor.EventFactory;import com.lmax.disruptor.dsl.Disruptor;import com.lmax.disruptor.dsl.EventHandlerGroup;import com.lmax.disruptor.dsl.ProducerType;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by aires on 2017/2/9. */public class DisruptorWithConsumerAndProductorDemo { public static void main(String[] args) throws InterruptedException { long beginTime=System.currentTimeMillis(); int bufferSize=1024; ExecutorService executor= Executors.newFixedThreadPool(4); Disruptor<TradeTransaction> disruptor=new Disruptor<TradeTransaction>(new EventFactory<TradeTransaction>() { public TradeTransaction newInstance() { return new TradeTransaction(); } }, bufferSize, executor, ProducerType.SINGLE, new BusySpinWaitStrategy()); //使用disruptor创建消费者组C1,C2 EventHandlerGroup<TradeTransaction> handlerGroup=disruptor.handleEventsWith(new TradeTransactionVasConsumer(),new TradeTransactionInDBHandler()); TradeTransactionJMSNotifyHandler jmsConsumer=new TradeTransactionJMSNotifyHandler(); //声明在C1,C2完事之后执行JMS消息发送操作 也就是流程走到C3 handlerGroup.then(jmsConsumer); disruptor.start();//启动 CountDownLatch latch=new CountDownLatch(1); //生产者准备 executor.submit(new TradeTransactionPublisher(latch, disruptor)); latch.await();//等待生产者完事. disruptor.shutdown(); executor.shutdown(); System.out.println("总耗时:"+(System.currentTimeMillis()-beginTime)); }}
import com.lmax.disruptor.EventHandler;/** * Created by aires on 2017/2/9. */public class TradeTransactionJMSNotifyHandler implements EventHandler<TradeTransaction> { public void onEvent(TradeTransaction event, long sequence, boolean endOfBatch) throws Exception { //do send jms message }}
import com.lmax.disruptor.dsl.Disruptor;import java.util.concurrent.CountDownLatch;/** * Created by aires on 2017/2/9. */public class TradeTransactionPublisher implements Runnable{ Disruptor<TradeTransaction> disruptor; private CountDownLatch latch; private static int LOOP=10000000;//模拟一千万次交易的发生 public TradeTransactionPublisher(CountDownLatch latch,Disruptor<TradeTransaction> disruptor) { this.disruptor=disruptor; this.latch=latch; } public void run() { TradeTransactionEventTranslator tradeTransloator=new TradeTransactionEventTranslator(); for(int i=0;i<LOOP;i++){ disruptor.publishEvent(tradeTransloator); } latch.countDown(); }}
import com.lmax.disruptor.EventTranslator;import java.util.Random;/** * Created by aires on 2017/2/9. */public class TradeTransactionEventTranslator implements EventTranslator<TradeTransaction> { private Random random=new Random(); public void translateTo(TradeTransaction event, long sequence) { this.generateTradeTransaction(event); } private TradeTransaction generateTradeTransaction(TradeTransaction trade){ trade.setPrice(random.nextDouble()*9999); return trade; }}
import com.lmax.disruptor.EventHandler;/** * Created by aires on 2017/2/9. */public class TradeTransactionVasConsumer implements EventHandler<TradeTransaction> { public void onEvent(TradeTransaction event, long sequence, boolean endOfBatch) throws Exception { //do something.... }}
0 0
- Disruptor 实例
- Disruptor
- disruptor
- disruptor
- disruptor
- disruptor
- disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- disruptor
- Disruptor译文
- disruptor流程
- Disruptor入门
- javascript中的this关键字详解 -- 写的太好了
- 如何注册激活CleanMyMac软件
- .NET 加/解密
- Brackets(区间dp之括号匹配)
- android外部存储
- Disruptor 实例
- 设计模式之代理模式
- 复习makefile
- [LeetCode]26 Remove Duplicates from Sorted Array
- JFreeChart 折线图
- MxNet系列——community——contribute
- Android应用瘦身
- 如何远程登陆Linux图形界面
- KeyPoint of 《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》