package com.flying.cattle.me.disruptor; import java.util.concurrent.ThreadFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.flying.cattle.me.config.HazelcastConfig; import com.flying.cattle.me.disruptor.exception.MyHandlerException; import com.flying.cattle.me.disruptor.factory.OrderFactory; import com.flying.cattle.me.disruptor.handler.InputDepthHandler; import com.flying.cattle.me.disruptor.handler.MatchHandler; import com.flying.cattle.me.disruptor.handler.OutDepthHandler; import com.flying.cattle.me.entity.MatchOrder; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.lmax.disruptor.EventFactory; import com.lmax.disruptor.RingBuffer; import com.lmax.disruptor.YieldingWaitStrategy; import com.lmax.disruptor.dsl.Disruptor; import com.lmax.disruptor.dsl.ProducerType; @Configuration @ConditionalOnBean(HazelcastConfig.class) public class DisruptorConfig { @Bean public RingBuffer<MatchOrder> ringBuffer() { EventFactory<MatchOrder> factory = new OrderFactory(); int ringBufferSize = 1024 * 1024; ThreadFactory disruptorThreadPool = new ThreadFactoryBuilder().setNameFormat("DisruptorThreadPool").build(); Disruptor<MatchOrder> disruptor = new Disruptor<MatchOrder>(factory, ringBufferSize, disruptorThreadPool, ProducerType.MULTI, new YieldingWaitStrategy()); disruptor.setDefaultExceptionHandler(new MyHandlerException());// Disruptor异常统计 // 单线处理撮合, 并行处理盘口和订单薄 disruptor.handleEventsWithWorkerPool(new MatchHandler(),new MatchHandler()).then(new InputDepthHandler(),new OutDepthHandler()); disruptor.start(); return disruptor.getRingBuffer(); } }