org.apache.camel.processor
Class RoutingSlip
java.lang.Object
org.apache.camel.impl.ServiceSupport
org.apache.camel.processor.RoutingSlip
- All Implemented Interfaces:
- AsyncProcessor, Processor, Traceable, Service, ShutdownableService
- Direct Known Subclasses:
- DynamicRouter
public class RoutingSlip
- extends ServiceSupport
- implements AsyncProcessor, Traceable
Implements a Routing Slip
pattern where the list of actual endpoints to send a message exchange to are
dependent on the value of a message header.
This implementation mirrors the logic from the Pipeline
in the async variation
as the failover load balancer is a specialized pipeline. So the trick is to keep doing the same as the
pipeline to ensure it works the same and the async routing engine is flawless.
Nested Class Summary |
protected static interface |
RoutingSlip.RoutingSlipIterator
The iterator to be used for retrieving the next routing slip(s) to be used. |
Methods inherited from class org.apache.camel.impl.ServiceSupport |
addChildService, doResume, doShutdown, doSuspend, getStatus, getVersion, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspended, isSuspending, removeChildService, resume, shutdown, start, start, stop, suspend |
log
protected final transient org.apache.commons.logging.Log log
producerCache
protected ProducerCache producerCache
ignoreInvalidEndpoints
protected boolean ignoreInvalidEndpoints
header
protected String header
expression
protected Expression expression
uriDelimiter
protected String uriDelimiter
camelContext
protected final CamelContext camelContext
RoutingSlip
public RoutingSlip(CamelContext camelContext)
RoutingSlip
public RoutingSlip(CamelContext camelContext,
Expression expression,
String uriDelimiter)
setDelimiter
public void setDelimiter(String delimiter)
isIgnoreInvalidEndpoints
public boolean isIgnoreInvalidEndpoints()
setIgnoreInvalidEndpoints
public void setIgnoreInvalidEndpoints(boolean ignoreInvalidEndpoints)
toString
public String toString()
- Overrides:
toString
in class Object
getTraceLabel
public String getTraceLabel()
- Description copied from interface:
Traceable
- Gets the trace label used for logging when tracing is enabled.
The label should be short and precise.
- Specified by:
getTraceLabel
in interface Traceable
- Returns:
- the label
process
public void process(Exchange exchange)
throws Exception
- Description copied from interface:
Processor
- Processes the message exchange
- Specified by:
process
in interface Processor
- Parameters:
exchange
- the message exchange
- Throws:
Exception
- if an internal processing error has occurred.
process
public boolean process(Exchange exchange,
AsyncCallback callback)
- Description copied from interface:
AsyncProcessor
- Processes the message exchange.
Similar to
Processor.process(org.apache.camel.Exchange)
, but the caller supports having the exchange asynchronously processed.
If there was a failure processing then the caused Exception
would be set on the Exchange
.
- Specified by:
process
in interface AsyncProcessor
- Parameters:
exchange
- the message exchangecallback
- the AsyncCallback
will be invoked when the processing of the exchange is completed.
If the exchange is completed synchronously, then the callback is also invoked synchronously.
The callback should therefore be careful of starting recursive loop.
- Returns:
- (doneSync) true to continue execute synchronously, false to continue being executed asynchronously
- See Also:
AsyncProcessorHelper.process(AsyncProcessor, Exchange, AsyncCallback)
doRoutingSlip
public boolean doRoutingSlip(Exchange exchange,
Object routingSlip,
AsyncCallback callback)
createRoutingSlipIterator
protected RoutingSlip.RoutingSlipIterator createRoutingSlipIterator(Exchange exchange)
- Creates the route slip iterator to be used.
- Parameters:
exchange
- the exchange
- Returns:
- the iterator, should never be null
resolveEndpoint
protected Endpoint resolveEndpoint(RoutingSlip.RoutingSlipIterator iter,
Exchange exchange)
throws Exception
- Throws:
Exception
prepareExchangeForRoutingSlip
protected Exchange prepareExchangeForRoutingSlip(Exchange current,
Endpoint endpoint)
processExchange
protected boolean processExchange(Endpoint endpoint,
Exchange exchange,
Exchange original,
AsyncCallback callback,
RoutingSlip.RoutingSlipIterator iter)
doStart
protected void doStart()
throws Exception
- Specified by:
doStart
in class ServiceSupport
- Throws:
Exception
doStop
protected void doStop()
throws Exception
- Specified by:
doStop
in class ServiceSupport
- Throws:
Exception
Apache CAMEL