Java Code Examples for com.lmax.disruptor.dsl.Disruptor#handleExceptionsWith()
The following examples show how to use
com.lmax.disruptor.dsl.Disruptor#handleExceptionsWith() .
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: Dispatcher.java From Electrons with MIT License | 5 votes |
/** * 根据config初始化特殊通道 * * @param symbol 事件 * @param listeners 对应的监听器集合 */ private void initSpecDisruptor(String symbol, List<ElectronsListener> listeners) { ExecutorService specPool = Executors.newFixedThreadPool(conf.getSpecCircuitNum(), new ThreadFactory() { final AtomicInteger cursor = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { return new Thread(r, "Electrons Thread (from spec channel) : thread" + cursor.incrementAndGet()); } }); pools.add(specPool); Disruptor<ElectronsHolder> disruptor = new Disruptor<>(ElectronsHolder::new, conf.getSpecCircuitLen(), specPool, ProducerType.MULTI, new LiteBlockingWaitStrategy()); disruptor.handleExceptionsWith(new ElecExceptionHandler("Spec Disruptor {" + symbol + "}")); //初始化管道并放入集合中 SpecChannel specChannel = new SpecChannel(disruptor); if (conf.isBreaker()) { EventCountCircuitBreaker breaker = new EventCountCircuitBreaker(conf.getErrorNum(), conf.getPerUnit(), conf.getUnit(), conf.getCloseThreshold(), conf.getRest(), conf.getRestUnit()); specChannel.setBreaker(breaker); } //构建listener顺序 ListenerChainBuilderNew.buildChain(specChannel, listeners); channelMap.put(SPEC_CHANNEL_PREFIX + symbol, specChannel); }
Example 2
Source File: Dispatcher.java From Electrons with MIT License | 5 votes |
/** * 初始化正常管道,任何情况下都会有 * * @param pool 线程池 */ private void initNormalChannel(ExecutorService pool) { Disruptor<ElectronsHolder> normalDis = new Disruptor<>(ElectronsHolder::new, conf.getCircuitLen(), pool, ProducerType.MULTI, new LiteBlockingWaitStrategy()); WorkHandler[] workHandlers = new WorkHandler[conf.getCircuitNum()]; Arrays.fill(workHandlers, (WorkHandler<ElectronsHolder>) electronsHolder -> electronsHolder.handle()); normalDis.handleEventsWithWorkerPool(workHandlers); normalDis.handleExceptionsWith(new ElecExceptionHandler("Normal Disruptor")); //初始化channel Channel normalChannel = new NormalChannel(normalDis); //配置限流相关 normalChannel.confLimitRate(conf.isLimitRate(), conf.getPermitsPerSecond(), conf.isWarmup(), conf.getWarmupPeriod(), conf.getWarmPeriodUnit()); channelMap.put(NORMAL_CHANNEL_KEY, normalChannel); }