Package org.apache.camel.processor
Class MulticastProcessor
java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.support.AsyncProcessorSupport
org.apache.camel.processor.MulticastProcessor
- All Implemented Interfaces:
AutoCloseable,org.apache.camel.AsyncProcessor,org.apache.camel.Navigate<org.apache.camel.Processor>,org.apache.camel.Processor,org.apache.camel.Service,org.apache.camel.ShutdownableService,org.apache.camel.spi.ErrorHandlerAware,org.apache.camel.spi.HasId,org.apache.camel.spi.IdAware,org.apache.camel.spi.RouteIdAware,org.apache.camel.StatefulService,org.apache.camel.SuspendableService,org.apache.camel.Traceable
- Direct Known Subclasses:
RecipientListProcessor,Splitter
public class MulticastProcessor
extends org.apache.camel.support.AsyncProcessorSupport
implements org.apache.camel.Navigate<org.apache.camel.Processor>, org.apache.camel.Traceable, org.apache.camel.spi.IdAware, org.apache.camel.spi.RouteIdAware, org.apache.camel.spi.ErrorHandlerAware
Implements the Multicast pattern to send a message exchange to a number of endpoints, each endpoint receiving a copy
of the message exchange.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classSub task processed reactive via theReactiveExecutor.protected classprotected classTransacted sub task processed synchronously usingProcessor.process(Exchange)with the same thread in a while loop control flow. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final org.apache.camel.Processorprotected final org.apache.camel.spi.ProcessorExchangeFactoryFields inherited from class org.apache.camel.support.service.BaseService
BUILT, FAILED, INITIALIZED, INITIALIZING, NEW, SHUTDOWN, SHUTTING_DOWN, STARTED, STARTING, status, STOPPED, STOPPING, SUSPENDED, SUSPENDING -
Constructor Summary
ConstructorsConstructorDescriptionMulticastProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.Route route, Collection<org.apache.camel.Processor> processors) MulticastProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.Route route, Collection<org.apache.camel.Processor> processors, org.apache.camel.AggregationStrategy aggregationStrategy) MulticastProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.Route route, Collection<org.apache.camel.Processor> processors, org.apache.camel.AggregationStrategy aggregationStrategy, boolean parallelProcessing, ExecutorService executorService, boolean shutdownExecutorService, boolean streaming, boolean stopOnException, long timeout, org.apache.camel.Processor onPrepare, boolean shareUnitOfWork, boolean parallelAggregate, int cacheSize) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidafterSend(ProcessorExchangePair pair, org.apache.camel.util.StopWatch watch) protected org.apache.camel.util.StopWatchprotected ExecutorServiceStrategy to create the thread pool for the aggregator background task which waits for and aggregates completed tasks when running in parallel mode.protected ProcessorExchangePaircreateProcessorExchangePair(int index, org.apache.camel.Processor processor, org.apache.camel.Exchange exchange, org.apache.camel.Route route) Creates theProcessorExchangePairwhich holds the processor and exchange to be send out.protected Iterable<ProcessorExchangePair> createProcessorExchangePairs(org.apache.camel.Exchange exchange) protected org.apache.camel.ProcessorcreateUnitOfWorkProcessor(org.apache.camel.Route route, org.apache.camel.Processor processor, org.apache.camel.Exchange exchange) Strategy to create the unit of work to be used for the sub routeprotected voiddoAggregate(AtomicReference<org.apache.camel.Exchange> result, org.apache.camel.Exchange exchange, org.apache.camel.Exchange inputExchange) Aggregate theExchangewith the current result.protected voiddoBuild()protected voiddoDone(org.apache.camel.Exchange original, org.apache.camel.Exchange subExchange, Iterable<ProcessorExchangePair> pairs, org.apache.camel.AsyncCallback callback, boolean doneSync, boolean forceExhaust) Common work which must be done when we are done multicasting.protected voiddoInit()protected booleandoProcess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected voidprotected voiddoStart()protected voiddoStop()org.apache.camel.AggregationStrategyUsegetAggregationStrategy(org.apache.camel.Exchange)instead.protected org.apache.camel.AggregationStrategygetAggregationStrategy(org.apache.camel.Exchange exchange) intMaximum cache size used for reusing processorsorg.apache.camel.CamelContextorg.apache.camel.Processorprotected IntegergetExchangeIndex(org.apache.camel.Exchange exchange) getId()Collection<org.apache.camel.Processor> Returns the producers to multicast tolongAn optional timeout in millis when using parallel processingbooleanhasNext()booleanDeprecated.booleanbooleanbooleanShould the multicast processor stop processing further exchanges in case of an exception occurred?booleanIs the multicast processor working in streaming mode?booleanList<org.apache.camel.Processor> next()protected voidprepareSharedUnitOfWork(org.apache.camel.Exchange childExchange, org.apache.camel.Exchange parentExchange) Prepares the exchange for participating in a shared unit of workbooleanprocess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected voidremoveAggregationStrategyFromExchange(org.apache.camel.Exchange exchange) Removes the associatedAggregationStrategyfrom theExchangewhich must be done after use.protected voidprotected voidprotected ScheduledFuture<?> voidsetAggregateExecutorService(ExecutorService aggregateExecutorService) protected voidsetAggregationStrategyOnExchange(org.apache.camel.Exchange exchange, org.apache.camel.AggregationStrategy aggregationStrategy) Sets the givenAggregationStrategyon theExchange.voidsetErrorHandler(org.apache.camel.Processor errorHandler) voidvoidsetRouteId(String routeId) voidsetSynchronous(boolean synchronous) protected static voidsetToEndpoint(org.apache.camel.Exchange exchange, org.apache.camel.Processor processor) toString()protected voidupdateNewExchange(org.apache.camel.Exchange exchange, int index, Iterable<ProcessorExchangePair> allPairs, boolean hasNext) protected org.apache.camel.ProcessorwrapInErrorHandler(org.apache.camel.Route route, org.apache.camel.Exchange exchange, org.apache.camel.Processor processor) Methods inherited from class org.apache.camel.support.AsyncProcessorSupport
process, processAsyncMethods inherited from class org.apache.camel.support.service.BaseService
build, doFail, doLifecycleChange, doResume, doSuspend, fail, getInternalLock, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspendMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.camel.spi.IdAware
setGeneratedIdMethods inherited from interface org.apache.camel.Service
build, close, init, start, stopMethods inherited from interface org.apache.camel.ShutdownableService
shutdownMethods inherited from interface org.apache.camel.StatefulService
getStatus, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspendingMethods inherited from interface org.apache.camel.SuspendableService
isSuspended, resume, suspend
-
Field Details
-
onPrepare
protected final org.apache.camel.Processor onPrepare -
processorExchangeFactory
protected final org.apache.camel.spi.ProcessorExchangeFactory processorExchangeFactory
-
-
Constructor Details
-
MulticastProcessor
public MulticastProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.Route route, Collection<org.apache.camel.Processor> processors) -
MulticastProcessor
public MulticastProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.Route route, Collection<org.apache.camel.Processor> processors, org.apache.camel.AggregationStrategy aggregationStrategy) -
MulticastProcessor
public MulticastProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.Route route, Collection<org.apache.camel.Processor> processors, org.apache.camel.AggregationStrategy aggregationStrategy, boolean parallelProcessing, ExecutorService executorService, boolean shutdownExecutorService, boolean streaming, boolean stopOnException, long timeout, org.apache.camel.Processor onPrepare, boolean shareUnitOfWork, boolean parallelAggregate, int cacheSize)
-
-
Method Details
-
toString
-
getId
- Specified by:
getIdin interfaceorg.apache.camel.spi.HasId
-
setId
- Specified by:
setIdin interfaceorg.apache.camel.spi.IdAware
-
getRouteId
- Specified by:
getRouteIdin interfaceorg.apache.camel.spi.RouteIdAware
-
setRouteId
- Specified by:
setRouteIdin interfaceorg.apache.camel.spi.RouteIdAware
-
setErrorHandler
public void setErrorHandler(org.apache.camel.Processor errorHandler) - Specified by:
setErrorHandlerin interfaceorg.apache.camel.spi.ErrorHandlerAware
-
getErrorHandler
public org.apache.camel.Processor getErrorHandler()- Specified by:
getErrorHandlerin interfaceorg.apache.camel.spi.ErrorHandlerAware
-
getTraceLabel
- Specified by:
getTraceLabelin interfaceorg.apache.camel.Traceable
-
getCamelContext
public org.apache.camel.CamelContext getCamelContext() -
isSynchronous
public boolean isSynchronous() -
setSynchronous
public void setSynchronous(boolean synchronous) -
doBuild
- Overrides:
doBuildin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
doInit
- Overrides:
doInitin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
process
public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) - Specified by:
processin interfaceorg.apache.camel.AsyncProcessor
-
doProcess
protected boolean doProcess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) -
schedule
-
schedule
-
schedule
protected ScheduledFuture<?> schedule(Executor executor, Runnable runnable, long delay, TimeUnit unit) -
beforeSend
-
afterSend
-
doDone
protected void doDone(org.apache.camel.Exchange original, org.apache.camel.Exchange subExchange, Iterable<ProcessorExchangePair> pairs, org.apache.camel.AsyncCallback callback, boolean doneSync, boolean forceExhaust) Common work which must be done when we are done multicasting. This logic applies for both running synchronous and asynchronous as there are multiple exist points when using the asynchronous routing engine. And therefore we want the logic in one method instead of being scattered.- Parameters:
original- the original exchangesubExchange- the current sub exchange, can be null for the synchronous partpairs- the pairs with the exchanges to processcallback- the callbackdoneSync- the doneSync parameter to call on callbackforceExhaust- whether error handling is exhausted
-
doAggregate
protected void doAggregate(AtomicReference<org.apache.camel.Exchange> result, org.apache.camel.Exchange exchange, org.apache.camel.Exchange inputExchange) Aggregate theExchangewith the current result. This method is synchronized and is called directly when parallelAggregate is disabled (by default).- Parameters:
result- the current resultexchange- the exchange to be added to the resultinputExchange- the input exchange that was sent as input to this EIP
-
updateNewExchange
protected void updateNewExchange(org.apache.camel.Exchange exchange, int index, Iterable<ProcessorExchangePair> allPairs, boolean hasNext) -
getExchangeIndex
-
createProcessorExchangePairs
protected Iterable<ProcessorExchangePair> createProcessorExchangePairs(org.apache.camel.Exchange exchange) throws Exception - Throws:
Exception
-
createProcessorExchangePair
protected ProcessorExchangePair createProcessorExchangePair(int index, org.apache.camel.Processor processor, org.apache.camel.Exchange exchange, org.apache.camel.Route route) Creates theProcessorExchangePairwhich holds the processor and exchange to be send out. You must use this method to create the instances ofProcessorExchangePairas they need to be specially prepared before use.- Parameters:
index- the indexprocessor- the processorexchange- the exchangeroute- the route context- Returns:
- prepared for use
-
wrapInErrorHandler
protected org.apache.camel.Processor wrapInErrorHandler(org.apache.camel.Route route, org.apache.camel.Exchange exchange, org.apache.camel.Processor processor) -
createUnitOfWorkProcessor
protected org.apache.camel.Processor createUnitOfWorkProcessor(org.apache.camel.Route route, org.apache.camel.Processor processor, org.apache.camel.Exchange exchange) Strategy to create the unit of work to be used for the sub route- Parameters:
processor- the processorexchange- the exchange- Returns:
- the unit of work processor
-
doStart
- Overrides:
doStartin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
createAggregateExecutorService
Strategy to create the thread pool for the aggregator background task which waits for and aggregates completed tasks when running in parallel mode.- Parameters:
name- the suggested name for the background thread- Returns:
- the thread pool
-
doStop
- Overrides:
doStopin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
doShutdown
- Overrides:
doShutdownin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
setToEndpoint
protected static void setToEndpoint(org.apache.camel.Exchange exchange, org.apache.camel.Processor processor) -
getAggregationStrategy
protected org.apache.camel.AggregationStrategy getAggregationStrategy(org.apache.camel.Exchange exchange) -
setAggregationStrategyOnExchange
protected void setAggregationStrategyOnExchange(org.apache.camel.Exchange exchange, org.apache.camel.AggregationStrategy aggregationStrategy) Sets the givenAggregationStrategyon theExchange.- Parameters:
exchange- the exchangeaggregationStrategy- the strategy
-
removeAggregationStrategyFromExchange
protected void removeAggregationStrategyFromExchange(org.apache.camel.Exchange exchange) Removes the associatedAggregationStrategyfrom theExchangewhich must be done after use.- Parameters:
exchange- the current exchange
-
isStreaming
public boolean isStreaming()Is the multicast processor working in streaming mode? In streaming mode:- we use
Iterableto ensure we can send messages as soon as the data becomes available - for parallel processing, we start aggregating responses as they get send back to the processor; this means
the
AggregationStrategyhas to take care of handling out-of-order arrival of exchanges
- we use
-
isStopOnException
public boolean isStopOnException()Should the multicast processor stop processing further exchanges in case of an exception occurred? -
getProcessors
Returns the producers to multicast to -
getTimeout
public long getTimeout()An optional timeout in millis when using parallel processing -
getCacheSize
public int getCacheSize()Maximum cache size used for reusing processors -
getAggregationStrategy
public org.apache.camel.AggregationStrategy getAggregationStrategy()UsegetAggregationStrategy(org.apache.camel.Exchange)instead. -
isParallelProcessing
public boolean isParallelProcessing() -
isParallelAggregate
Deprecated. -
getAggregateExecutorService
-
setAggregateExecutorService
-
next
- Specified by:
nextin interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
hasNext
public boolean hasNext()- Specified by:
hasNextin interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-