@Override public <S extends Message, T extends Message> SyncDispatcher<S> createSyncDispatcher(SinkModule<S, T> module) { Objects.requireNonNull(module, "module cannot be null"); final DispatcherState<W,S,T> state = new DispatcherState<>(this, module); return createSyncDispatcher(state); }
@Override public void close() throws Exception { super.close(); state.close(); } };
/** * Invokes dispatch within a timer context. */ private <S extends Message, T extends Message> void timedDispatch(DispatcherState<W, S,T> state, T message) { try (Context ctx = state.getDispatchTimer().time()) { dispatch(state.getModule(), state.getMetaData(), message); } }
this.asyncPolicy = asyncPolicy; this.state = state; sinkModule = state.getModule(); if (OffHeapServiceLoader.isOffHeapEnabled()) { offHeapQueue = OffHeapServiceLoader.getOffHeapQueue(); queue = new LinkedBlockingQueue<Runnable>(asyncPolicy.getQueueSize()); final Counter droppedCounter = state.getMetrics().counter(MetricRegistry.name(state.getModule().getId(), "dropped")); rejectedExecutionHandler = new RejectedExecutionHandler() { @Override state.getMetrics().register(MetricRegistry.name(state.getModule().getId(), "queue-size"), new Gauge<Integer>() { @Override public Integer getValue() { TimeUnit.MILLISECONDS, queue, new LogPreservingThreadFactory(SystemInfoUtils.DEFAULT_INSTANCE_ID + ".Sink.AsyncDispatcher." + state.getModule().getId(), Integer.MAX_VALUE), rejectedExecutionHandler );
protected <S extends Message, T extends Message> SyncDispatcher<S> createSyncDispatcher(DispatcherState<W,S,T> state) { final SinkModule<S,T> module = state.getModule(); if (module.getAggregationPolicy() != null) { // Aggregate the message before dispatching them return new AggregatingSinkMessageProducer<S,T>(module) { @Override public void dispatch(T message) { AbstractMessageDispatcherFactory.this.timedDispatch(state, message); } @Override public void close() throws Exception { super.close(); state.close(); } }; } else { // No aggregation strategy is set, dispatch directly to reduce overhead return new DirectDispatcher<>(state); } }
this.asyncPolicy = asyncPolicy; this.state = state; sinkModule = state.getModule(); if (OffHeapServiceLoader.isOffHeapEnabled()) { offHeapQueue = OffHeapServiceLoader.getOffHeapQueue(); queue = new LinkedBlockingQueue<Runnable>(asyncPolicy.getQueueSize()); final Counter droppedCounter = state.getMetrics().counter(MetricRegistry.name(state.getModule().getId(), "dropped")); rejectedExecutionHandler = new RejectedExecutionHandler() { @Override state.getMetrics().register(MetricRegistry.name(state.getModule().getId(), "queue-size"), new Gauge<Integer>() { @Override public Integer getValue() { TimeUnit.MILLISECONDS, queue, new LogPreservingThreadFactory(SystemInfoUtils.DEFAULT_INSTANCE_ID + ".Sink.AsyncDispatcher." + state.getModule().getId(), Integer.MAX_VALUE), rejectedExecutionHandler );
protected <S extends Message, T extends Message> SyncDispatcher<S> createSyncDispatcher(DispatcherState<W,S,T> state) { final SinkModule<S,T> module = state.getModule(); if (module.getAggregationPolicy() != null) { // Aggregate the message before dispatching them return new AggregatingSinkMessageProducer<S,T>(module) { @Override public void dispatch(T message) { AbstractMessageDispatcherFactory.this.timedDispatch(state, message); } @Override public void close() throws Exception { super.close(); state.close(); } }; } else { // No aggregation strategy is set, dispatch directly to reduce overhead return new DirectDispatcher<>(state); } }
/** * Invokes dispatch within a timer context. */ private <S extends Message, T extends Message> void timedDispatch(DispatcherState<W, S,T> state, T message) { try (Context ctx = state.getDispatchTimer().time()) { dispatch(state.getModule(), state.getMetaData(), message); } }
@Override public <S extends Message, T extends Message> SyncDispatcher<S> createSyncDispatcher(SinkModule<S, T> module) { Objects.requireNonNull(module, "module cannot be null"); final DispatcherState<W,S,T> state = new DispatcherState<>(this, module); return createSyncDispatcher(state); }
@Override public void close() throws Exception { super.close(); state.close(); } };
@Override public <S extends Message, T extends Message> AsyncDispatcher<S> createAsyncDispatcher(SinkModule<S, T> module) { Objects.requireNonNull(module, "module cannot be null"); Objects.requireNonNull(module.getAsyncPolicy(), "module must have an AsyncPolicy"); final DispatcherState<W,S,T> state = new DispatcherState<>(this, module); final SyncDispatcher<S> syncDispatcher = createSyncDispatcher(state); return new AsyncDispatcherImpl<>(state, module.getAsyncPolicy(), syncDispatcher); }
@Override public <S extends Message, T extends Message> AsyncDispatcher<S> createAsyncDispatcher(SinkModule<S, T> module) { Objects.requireNonNull(module, "module cannot be null"); Objects.requireNonNull(module.getAsyncPolicy(), "module must have an AsyncPolicy"); final DispatcherState<W,S,T> state = new DispatcherState<>(this, module); final SyncDispatcher<S> syncDispatcher = createSyncDispatcher(state); return new AsyncDispatcherImpl<>(state, module.getAsyncPolicy(), syncDispatcher); }