Package org.apache.camel.processor
Class StreamResequencer
java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.support.AsyncProcessorSupport
org.apache.camel.processor.StreamResequencer
- All Implemented Interfaces:
AutoCloseable,org.apache.camel.AsyncProcessor,org.apache.camel.Navigate<org.apache.camel.Processor>,org.apache.camel.Processor,SequenceSender<org.apache.camel.Exchange>,org.apache.camel.Service,org.apache.camel.ShutdownableService,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
public class StreamResequencer
extends org.apache.camel.support.AsyncProcessorSupport
implements SequenceSender<org.apache.camel.Exchange>, org.apache.camel.Navigate<org.apache.camel.Processor>, org.apache.camel.Traceable, org.apache.camel.spi.IdAware, org.apache.camel.spi.RouteIdAware
A resequencer that re-orders a (continuous) stream of
Exchanges. The algorithm implemented by
ResequencerEngine is based on the detection of gaps in a message stream rather than on a fixed batch size.
Gap detection in combination with timeouts removes the constraint of having to know the number of messages of a
sequence (i.e. the batch size) in advance.
Messages must contain a unique sequence number for which a predecessor and a successor is known. For example a message with the sequence number 3 has a predecessor message with the sequence number 2 and a successor message with the sequence number 4. The message sequence 2,3,5 has a gap because the successor of 3 is missing. The resequencer therefore has to retain message 5 until message 4 arrives (or a timeout occurs).
Instances of this class poll for Exchanges from a given endpoint. Resequencing work and the
delivery of messages to the next processor is done within the single polling thread.
- See Also:
-
Field Summary
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
ConstructorsConstructorDescriptionStreamResequencer(org.apache.camel.CamelContext camelContext, org.apache.camel.Processor processor, SequenceElementComparator<org.apache.camel.Exchange> comparator, org.apache.camel.Expression expression) Creates a newStreamResequencerinstance. -
Method Summary
Modifier and TypeMethodDescriptionprotected voiddoBuild()protected voiddoInit()protected voiddoStart()protected voiddoStop()intReturns this resequencer's capacity.org.apache.camel.spi.ExceptionHandlerReturns this resequencer's exception handler.org.apache.camel.ExpressiongetId()org.apache.camel.ProcessorReturns the next processor.longReturns this resequencer's timeout.booleanhasNext()booleanbooleanList<org.apache.camel.Processor> next()booleanprocess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) voidsendElement(org.apache.camel.Exchange exchange) Sends theexchangeto the nextprocessor.voidsetCapacity(int capacity) voidsetDeliveryAttemptInterval(long deliveryAttemptInterval) voidvoidsetIgnoreInvalidExchanges(boolean ignoreInvalidExchanges) Sets whether to ignore invalid exchanges which cannot be used by this stream resequencer.voidsetRejectOld(Boolean rejectOld) voidsetRouteId(String routeId) voidsetTimeout(long timeout) toString()Methods inherited from class org.apache.camel.support.AsyncProcessorSupport
process, processAsyncMethods inherited from class org.apache.camel.support.service.BaseService
build, doFail, doLifecycleChange, doResume, doShutdown, 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
-
Constructor Details
-
StreamResequencer
public StreamResequencer(org.apache.camel.CamelContext camelContext, org.apache.camel.Processor processor, SequenceElementComparator<org.apache.camel.Exchange> comparator, org.apache.camel.Expression expression) Creates a newStreamResequencerinstance.- Parameters:
processor- next processor that processes re-ordered exchanges.comparator- a sequence element comparator for exchanges.
-
-
Method Details
-
getExpression
public org.apache.camel.Expression getExpression() -
getExceptionHandler
public org.apache.camel.spi.ExceptionHandler getExceptionHandler()Returns this resequencer's exception handler. -
getProcessor
public org.apache.camel.Processor getProcessor()Returns the next processor. -
getCapacity
public int getCapacity()Returns this resequencer's capacity. The capacity is the maximum number of exchanges that can be managed by this resequencer at a given point in time. If the capacity if reached, polling from the endpoint will be skipped fortimeoutmilliseconds giving exchanges the possibility to time out and to be delivered after the waiting period.- Returns:
- this resequencer's capacity.
-
getTimeout
public long getTimeout()Returns this resequencer's timeout. This sets the resequencer engine's timeout viaResequencerEngine.setTimeout(long). This value is also used to define the polling timeout from the endpoint.- Returns:
- this resequencer's timeout. (Processor)
- See Also:
-
setCapacity
public void setCapacity(int capacity) -
setTimeout
public void setTimeout(long timeout) -
setDeliveryAttemptInterval
public void setDeliveryAttemptInterval(long deliveryAttemptInterval) -
isIgnoreInvalidExchanges
public boolean isIgnoreInvalidExchanges() -
setRejectOld
-
isRejectOld
public boolean isRejectOld() -
setIgnoreInvalidExchanges
public void setIgnoreInvalidExchanges(boolean ignoreInvalidExchanges) Sets whether to ignore invalid exchanges which cannot be used by this stream resequencer. Default is false, by which anCamelExchangeExceptionis thrown if theExchangeis invalid. -
toString
-
getTraceLabel
- Specified by:
getTraceLabelin interfaceorg.apache.camel.Traceable
-
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
-
doBuild
- Overrides:
doBuildin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
doInit
- Overrides:
doInitin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
doStart
- Overrides:
doStartin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
doStop
- Overrides:
doStopin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
sendElement
Sends theexchangeto the nextprocessor.- Specified by:
sendElementin interfaceSequenceSender<org.apache.camel.Exchange>- Parameters:
exchange- exchange to send.- Throws:
Exception- if delivery fails.
-
process
public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) - Specified by:
processin interfaceorg.apache.camel.AsyncProcessor
-
hasNext
public boolean hasNext()- Specified by:
hasNextin interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
next
- Specified by:
nextin interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-