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
Exchange
s. 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 Exchange
s 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
ConstructorDescriptionStreamResequencer
(org.apache.camel.CamelContext camelContext, org.apache.camel.Processor processor, SequenceElementComparator<org.apache.camel.Exchange> comparator, org.apache.camel.Expression expression) Creates a newStreamResequencer
instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
doBuild()
protected void
doInit()
protected void
doStart()
protected void
doStop()
int
Returns this resequencer's capacity.org.apache.camel.spi.ExceptionHandler
Returns this resequencer's exception handler.org.apache.camel.Expression
getId()
org.apache.camel.Processor
Returns the next processor.long
Returns this resequencer's timeout.boolean
hasNext()
boolean
boolean
List
<org.apache.camel.Processor> next()
boolean
process
(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) void
sendElement
(org.apache.camel.Exchange exchange) Sends theexchange
to the nextprocessor
.void
setCapacity
(int capacity) void
setDeliveryAttemptInterval
(long deliveryAttemptInterval) void
void
setIgnoreInvalidExchanges
(boolean ignoreInvalidExchanges) Sets whether to ignore invalid exchanges which cannot be used by this stream resequencer.void
setRejectOld
(Boolean rejectOld) void
setRouteId
(String routeId) void
setTimeout
(long timeout) toString()
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, doShutdown, 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
-
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 newStreamResequencer
instance.- 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 fortimeout
milliseconds 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 anCamelExchangeException
is thrown if theExchange
is invalid. -
toString
-
getTraceLabel
- Specified by:
getTraceLabel
in interfaceorg.apache.camel.Traceable
-
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
-
doBuild
- Overrides:
doBuild
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doInit
- Overrides:
doInit
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doStart
- Overrides:
doStart
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doStop
- Overrides:
doStop
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
sendElement
Sends theexchange
to the nextprocessor
.- Specified by:
sendElement
in 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:
process
in interfaceorg.apache.camel.AsyncProcessor
-
hasNext
public boolean hasNext()- Specified by:
hasNext
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
next
- Specified by:
next
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-