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
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.
ResequencerEngine
Constructor and Description |
---|
StreamResequencer(org.apache.camel.CamelContext camelContext,
org.apache.camel.Processor processor,
SequenceElementComparator<org.apache.camel.Exchange> comparator,
org.apache.camel.Expression expression)
Creates a new
StreamResequencer instance. |
Modifier and Type | Method and Description |
---|---|
protected void |
doStart() |
protected void |
doStop() |
int |
getCapacity()
Returns this resequencer's capacity.
|
org.apache.camel.spi.ExceptionHandler |
getExceptionHandler()
Returns this resequencer's exception handler.
|
org.apache.camel.Expression |
getExpression() |
String |
getId() |
org.apache.camel.Processor |
getProcessor()
Returns the next processor.
|
String |
getRouteId() |
long |
getTimeout()
Returns this resequencer's timeout.
|
String |
getTraceLabel() |
boolean |
hasNext() |
boolean |
isIgnoreInvalidExchanges() |
boolean |
isRejectOld() |
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 the
exchange to the next processor . |
void |
setCapacity(int capacity) |
void |
setDeliveryAttemptInterval(long deliveryAttemptInterval) |
void |
setId(String id) |
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) |
String |
toString() |
build, doBuild, doFail, doInit, 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
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
public StreamResequencer(org.apache.camel.CamelContext camelContext, org.apache.camel.Processor processor, SequenceElementComparator<org.apache.camel.Exchange> comparator, org.apache.camel.Expression expression)
StreamResequencer
instance.processor
- next processor that processes re-ordered exchanges.comparator
- a sequence element comparator for exchanges.public org.apache.camel.Expression getExpression()
public org.apache.camel.spi.ExceptionHandler getExceptionHandler()
public org.apache.camel.Processor getProcessor()
public int getCapacity()
timeout
milliseconds giving exchanges the possibility to time out and to be delivered after the
waiting period.public long getTimeout()
ResequencerEngine.setTimeout(long)
. This value is also used to define the polling timeout from the
endpoint.ResequencerEngine.setTimeout(long)
public void setCapacity(int capacity)
public void setTimeout(long timeout)
public void setDeliveryAttemptInterval(long deliveryAttemptInterval)
public boolean isIgnoreInvalidExchanges()
public void setRejectOld(Boolean rejectOld)
public boolean isRejectOld()
public void setIgnoreInvalidExchanges(boolean ignoreInvalidExchanges)
CamelExchangeException
is thrown if the Exchange
is
invalid.public String getTraceLabel()
getTraceLabel
in interface org.apache.camel.Traceable
public String getId()
getId
in interface org.apache.camel.spi.HasId
public void setId(String id)
setId
in interface org.apache.camel.spi.IdAware
public String getRouteId()
getRouteId
in interface org.apache.camel.spi.RouteIdAware
public void setRouteId(String routeId)
setRouteId
in interface org.apache.camel.spi.RouteIdAware
protected void doStart() throws Exception
doStart
in class org.apache.camel.support.AsyncProcessorSupport
Exception
protected void doStop() throws Exception
doStop
in class org.apache.camel.support.AsyncProcessorSupport
Exception
public void sendElement(org.apache.camel.Exchange exchange) throws Exception
exchange
to the next processor
.sendElement
in interface SequenceSender<org.apache.camel.Exchange>
exchange
- exchange to send.Exception
- if delivery fails.public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback)
process
in interface org.apache.camel.AsyncProcessor
public boolean hasNext()
hasNext
in interface org.apache.camel.Navigate<org.apache.camel.Processor>
public List<org.apache.camel.Processor> next()
next
in interface org.apache.camel.Navigate<org.apache.camel.Processor>
Apache Camel