The resequencer pattern, shown in Figure 52, enables you to resequence messages according to the sequence number stored in an NMR property. The ServiceMix EIP resequencer pattern maps to the Apache Camel resequencer configured with the stream resequencing algorithm.
The sequence of messages emitted from the resequencer is
determined by the value of the sequence number property:
messages with a low sequence number are emitted first and
messages with a higher number are emitted later. By default, the
sequence number is read from the
org.apache.servicemix.eip.sequence.number
property in ServiceMix, but you can customize the name of this
property using the eip:default-comparator element
in ServiceMix.
The equivalent concept in Apache Camel is a sequencing
expression, which can be any message-dependent
expression. When migrating from ServiceMix EIP, you normally
define an expression that extracts the sequence number from a
header (a Apache Camel header is equivalent to an NMR message
property). For example, to extract a sequence number from a
seqnum header, you can use the simple
expression, header.seqnum.
Example 26 shows how to define a resequencer using the ServiceMix EIP component.
Example 26. ServiceMix EIP Resequncer
<eip:resequencer
service="sample:Resequencer"
endpoint="ResequencerEndpoint"
comparator="#comparator"
capacity="100"
timeout="2000">
<eip:target>
<eip:exchange-target service="sample:SampleTarget" />
</eip:target>
</eip:resequencer>
<!-- Configure default comparator with custom sequence number property -->
<eip:default-comparator xml:id="comparator"
sequenceNumberKey="seqnum"/>Example 27 shows how to define an equivalent route using Apache Camel XML configuration.
Example 27. Apache Camel Resequencer Using XML
<route>
<from uri="jbi:endpoint:sample:Resequencer:ResequencerEndpoint"/>
<resequencer>
<simple>header.seqnum</simple>
<to uri="jbi:service:sample:SampleTarget" />
<stream-config capacity="100" timeout="2000"/>
</resequencer>
</route>Example 28 shows how to define an equivalent route using the Apache Camel Java DSL.
Example 28. Apache Camel Resequencer Using Java DSL
from("jbi:endpoint:sample:Resequencer:ResequencerEndpoint").
resequencer(header("seqnum")).
stream(new StreamResequencerConfig(100, 2000L)).
to("jbi:service:sample:SampleTarget");








