com.lmax.disruptor.WorkerPool Java Examples
The following examples show how to use
com.lmax.disruptor.WorkerPool.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DisruptorExecutorService.java From game-executor with Apache License 2.0 | 6 votes |
@Override public void startup() { EventBus eventBus = disruptorDispatchThread.getEventBus(); executorService = new NonOrderedQueuePoolExecutor(poolName, excutorSize); cycleEventHandler = new CycleEventHandler[excutorSize]; for(int i = 0; i < excutorSize; i++){ cycleEventHandler[i] = new CycleEventHandler(eventBus); } RingBuffer ringBuffer = disruptorDispatchThread.getRingBuffer(); workerPool = new WorkerPool(ringBuffer, ringBuffer.newBarrier(), new FatalExceptionHandler(), cycleEventHandler); ringBuffer.addGatingSequences(workerPool.getWorkerSequences()); workerPool.start(executorService); // BatchEventProcessor<CycleEvent>[] batchEventProcessors = new BatchEventProcessor[excutorSize]; // for(int i = 0; i < excutorSize; i++){ // batchEventProcessors[i] = new BatchEventProcessor<>(ringBuffer, sequenceBarrier, cycleEventHandler[i]); // ringBuffer.addGatingSequences(batchEventProcessors[i].getSequence()); //// executorService.submit(batchEventProcessors[i]); // } }
Example #2
Source File: RingBufferWorkerPoolFactory.java From netty-pubsub with MIT License | 5 votes |
/** * * @param type ���������� �������� �������� * @param bufferSize ringbuffer������ * @param waitStrategy �ȴ����� * @param messageConsumers ������ */ @SuppressWarnings("unchecked") public void initAndStart(ProducerType type, int bufferSize, WaitStrategy waitStrategy, MessageConsumer[] messageConsumers) { if(!startFlag){ //1. ����ringBuffer���� this.ringBuffer = RingBuffer.create(type, new EventFactory<MessageWrapper>() { public MessageWrapper newInstance() { return new MessageWrapper(); } }, bufferSize, waitStrategy); //2.�������դ�� this.sequenceBarrier = this.ringBuffer.newBarrier(); //3.���ù����� this.workerPool = new WorkerPool(this.ringBuffer, this.sequenceBarrier, new EventExceptionHandler(), messageConsumers); //4 ����������������������� for(MessageConsumer mc : messageConsumers){ this.consumers.put(mc.getConsumerId(), mc); } //5 ������ǵ�sequences this.ringBuffer.addGatingSequences(this.workerPool.getWorkerSequences()); //6 �������ǵĹ����� this.workerPool.start(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()/2)); //7.����������־����ֹ�ظ����� startFlag=true; } }
Example #3
Source File: DisruptorQueue.java From NetDiscovery with Apache License 2.0 | 5 votes |
/** * * @param consumerNum * @param threadNum * @param ringBufferSize RingBuffer 大小,必须是 2 的 N 次方 */ public DisruptorQueue(int consumerNum,int threadNum,int ringBufferSize) { Consumer[] consumers = new Consumer[consumerNum]; //创建ringBuffer ringBuffer = RingBuffer.create(ProducerType.MULTI, new EventFactory<RequestEvent>() { @Override public RequestEvent newInstance() { return new RequestEvent(); } }, ringBufferSize , new YieldingWaitStrategy()); SequenceBarrier barriers = ringBuffer.newBarrier(); for (int i = 0; i < consumers.length; i++) { consumers[i] = new Consumer(); } WorkerPool<RequestEvent> workerPool = new WorkerPool<RequestEvent>(ringBuffer, barriers, new EventExceptionHandler(), consumers); ringBuffer.addGatingSequences(workerPool.getWorkerSequences()); workerPool.start(Executors.newFixedThreadPool(threadNum)); producer = new Producer(ringBuffer); }
Example #4
Source File: KafkaRpcServer.java From devicehive-java-server with Apache License 2.0 | 5 votes |
public KafkaRpcServer(WorkerPool<ServerEvent> workerPool, RequestConsumer requestConsumer, ServerEventHandler eventHandler, int workerThreads) { this.workerPool = workerPool; this.requestConsumer = requestConsumer; this.eventHandler = eventHandler; this.workerThreads = workerThreads; }
Example #5
Source File: ServerBuilder.java From devicehive-java-server with Apache License 2.0 | 5 votes |
public RpcServer build() { final int workerThreads = 3; Producer<String, Response> responseProducer = new KafkaProducer<>(producerProps, new StringSerializer(), producerValueSerializer); final ServerEventHandler[] workHandlers = new ServerEventHandler[workerThreads]; IntStream.range(0, workerThreads).forEach( nbr -> workHandlers[nbr] = new ServerEventHandler(requestHandler, responseProducer) ); final WorkerPool<ServerEvent> workerPool = new WorkerPool<>(ServerEvent::new, new FatalExceptionHandler(), workHandlers); RequestConsumer requestConsumer = new RequestConsumer(topic, consumerProps, consumerThreads, consumerValueDeserializer); return new KafkaRpcServer(workerPool, requestConsumer, new ServerEventHandler(requestHandler, responseProducer), workerThreads); }
Example #6
Source File: DisruptorExecutorService.java From game-executor with Apache License 2.0 | 4 votes |
public WorkerPool getWorkerPool() { return workerPool; }
Example #7
Source File: DisruptorExecutorService.java From game-executor with Apache License 2.0 | 4 votes |
public void setWorkerPool(WorkerPool workerPool) { this.workerPool = workerPool; }
Example #8
Source File: MysqlMultiStageCoprocessor.java From canal with Apache License 2.0 | 4 votes |
@Override public void start() { super.start(); this.exception = null; this.disruptorMsgBuffer = RingBuffer.createSingleProducer(new MessageEventFactory(), ringBufferSize, new BlockingWaitStrategy()); int tc = parserThreadCount > 0 ? parserThreadCount : 1; this.parserExecutor = Executors.newFixedThreadPool(tc, new NamedThreadFactory("MultiStageCoprocessor-Parser-" + destination)); this.stageExecutor = Executors.newFixedThreadPool(2, new NamedThreadFactory("MultiStageCoprocessor-other-" + destination)); SequenceBarrier sequenceBarrier = disruptorMsgBuffer.newBarrier(); ExceptionHandler exceptionHandler = new SimpleFatalExceptionHandler(); // stage 2 this.logContext = new LogContext(); simpleParserStage = new BatchEventProcessor<MessageEvent>(disruptorMsgBuffer, sequenceBarrier, new SimpleParserStage(logContext)); simpleParserStage.setExceptionHandler(exceptionHandler); disruptorMsgBuffer.addGatingSequences(simpleParserStage.getSequence()); // stage 3 SequenceBarrier dmlParserSequenceBarrier = disruptorMsgBuffer.newBarrier(simpleParserStage.getSequence()); WorkHandler<MessageEvent>[] workHandlers = new DmlParserStage[tc]; for (int i = 0; i < tc; i++) { workHandlers[i] = new DmlParserStage(); } workerPool = new WorkerPool<MessageEvent>(disruptorMsgBuffer, dmlParserSequenceBarrier, exceptionHandler, workHandlers); Sequence[] sequence = workerPool.getWorkerSequences(); disruptorMsgBuffer.addGatingSequences(sequence); // stage 4 SequenceBarrier sinkSequenceBarrier = disruptorMsgBuffer.newBarrier(sequence); sinkStoreStage = new BatchEventProcessor<MessageEvent>(disruptorMsgBuffer, sinkSequenceBarrier, new SinkStoreStage()); sinkStoreStage.setExceptionHandler(exceptionHandler); disruptorMsgBuffer.addGatingSequences(sinkStoreStage.getSequence()); // start work stageExecutor.submit(simpleParserStage); stageExecutor.submit(sinkStoreStage); workerPool.start(parserExecutor); }