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
Modifier and TypeClassDescriptionprotected class
Sub task processed reactive via theReactiveExecutor
.protected class
protected class
Transacted sub task processed synchronously usingProcessor.process(Exchange)
with the same thread in a while loop control flow. -
Field Summary
Modifier and TypeFieldDescriptionprotected final org.apache.camel.Processor
protected final org.apache.camel.spi.ProcessorExchangeFactory
Fields inherited from class org.apache.camel.support.service.BaseService
BUILT, FAILED, INITIALIZED, INITIALIZING, lock, NEW, SHUTDOWN, SHUTTING_DOWN, STARTED, STARTING, status, STOPPED, STOPPING, SUSPENDED, SUSPENDING
-
Constructor Summary
ConstructorDescriptionMulticastProcessor
(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) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
afterSend
(ProcessorExchangePair pair, org.apache.camel.util.StopWatch watch) protected org.apache.camel.util.StopWatch
protected ExecutorService
Strategy to create the thread pool for the aggregator background task which waits for and aggregates completed tasks when running in parallel mode.protected ProcessorExchangePair
createProcessorExchangePair
(int index, org.apache.camel.Processor processor, org.apache.camel.Exchange exchange, org.apache.camel.Route route) Creates theProcessorExchangePair
which holds the processor and exchange to be send out.protected Iterable<ProcessorExchangePair>
createProcessorExchangePairs
(org.apache.camel.Exchange exchange) 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 routeprotected void
doAggregate
(AtomicReference<org.apache.camel.Exchange> result, org.apache.camel.Exchange exchange, org.apache.camel.Exchange inputExchange) Aggregate theExchange
with the current result.protected void
doBuild()
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.protected void
doInit()
protected boolean
doProcess
(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected void
protected void
doStart()
protected void
doStop()
org.apache.camel.AggregationStrategy
UsegetAggregationStrategy(org.apache.camel.Exchange)
instead.protected org.apache.camel.AggregationStrategy
getAggregationStrategy
(org.apache.camel.Exchange exchange) org.apache.camel.CamelContext
org.apache.camel.Processor
protected Integer
getExchangeIndex
(org.apache.camel.Exchange exchange) getId()
Collection<org.apache.camel.Processor>
Returns the producers to multicast tolong
An optional timeout in millis when using parallel processingboolean
hasNext()
boolean
boolean
boolean
boolean
Should the multicast processor stop processing further exchanges in case of an exception occurred?boolean
Is the multicast processor working in streaming mode?boolean
List<org.apache.camel.Processor>
next()
protected void
prepareSharedUnitOfWork
(org.apache.camel.Exchange childExchange, org.apache.camel.Exchange parentExchange) Prepares the exchange for participating in a shared unit of workboolean
process
(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected void
removeAggregationStrategyFromExchange
(org.apache.camel.Exchange exchange) Removes the associatedAggregationStrategy
from theExchange
which must be done after use.protected void
protected void
void
setAggregateExecutorService
(ExecutorService aggregateExecutorService) protected void
setAggregationStrategyOnExchange
(org.apache.camel.Exchange exchange, org.apache.camel.AggregationStrategy aggregationStrategy) Sets the givenAggregationStrategy
on theExchange
.void
setErrorHandler
(org.apache.camel.Processor errorHandler) void
void
setRouteId
(String routeId) void
setSynchronous
(boolean synchronous) protected static void
setToEndpoint
(org.apache.camel.Exchange exchange, org.apache.camel.Processor processor) toString()
protected void
updateNewExchange
(org.apache.camel.Exchange exchange, int index, Iterable<ProcessorExchangePair> allPairs, boolean hasNext) protected org.apache.camel.Processor
wrapInErrorHandler
(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, processAsync
Methods inherited from class org.apache.camel.support.service.BaseService
build, doFail, doLifecycleChange, doResume, doSuspend, fail, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspend
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.camel.spi.IdAware
setGeneratedId
Methods inherited from interface org.apache.camel.Service
build, close, init, start, stop
Methods inherited from interface org.apache.camel.ShutdownableService
shutdown
Methods inherited from interface org.apache.camel.StatefulService
getStatus, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspending
Methods 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)
-
-
Method Details
-
toString
-
getId
- Specified by:
getId
in interfaceorg.apache.camel.spi.HasId
-
setId
- Specified by:
setId
in interfaceorg.apache.camel.spi.IdAware
-
getRouteId
- Specified by:
getRouteId
in interfaceorg.apache.camel.spi.RouteIdAware
-
setRouteId
- Specified by:
setRouteId
in interfaceorg.apache.camel.spi.RouteIdAware
-
setErrorHandler
public void setErrorHandler(org.apache.camel.Processor errorHandler) - Specified by:
setErrorHandler
in interfaceorg.apache.camel.spi.ErrorHandlerAware
-
getErrorHandler
public org.apache.camel.Processor getErrorHandler()- Specified by:
getErrorHandler
in interfaceorg.apache.camel.spi.ErrorHandlerAware
-
getTraceLabel
- Specified by:
getTraceLabel
in interfaceorg.apache.camel.Traceable
-
getCamelContext
public org.apache.camel.CamelContext getCamelContext() -
isSynchronous
public boolean isSynchronous() -
setSynchronous
public void setSynchronous(boolean synchronous) -
doBuild
- Overrides:
doBuild
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doInit
- Overrides:
doInit
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
process
public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) - Specified by:
process
in interfaceorg.apache.camel.AsyncProcessor
-
doProcess
protected boolean doProcess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) -
schedule
-
schedule
-
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 theExchange
with 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 theProcessorExchangePair
which holds the processor and exchange to be send out. You must use this method to create the instances ofProcessorExchangePair
as 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:
doStart
in 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:
doStop
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doShutdown
- Overrides:
doShutdown
in 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 givenAggregationStrategy
on theExchange
.- Parameters:
exchange
- the exchangeaggregationStrategy
- the strategy
-
removeAggregationStrategyFromExchange
protected void removeAggregationStrategyFromExchange(org.apache.camel.Exchange exchange) Removes the associatedAggregationStrategy
from theExchange
which 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
Iterable
to 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
AggregationStrategy
has 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 -
getAggregationStrategy
public org.apache.camel.AggregationStrategy getAggregationStrategy()UsegetAggregationStrategy(org.apache.camel.Exchange)
instead. -
isParallelProcessing
public boolean isParallelProcessing() -
isParallelAggregate
public boolean isParallelAggregate() -
getAggregateExecutorService
-
setAggregateExecutorService
-
next
- Specified by:
next
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
hasNext
public boolean hasNext()- Specified by:
hasNext
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-