The following example shows how to use the batch-processing resequencer so that messages are sorted in order of the body() expression. That is messages are collected into a batch (either by a maximum number of messages per batch or using a timeout) then they are sorted in order and then sent out to their output.
Using the Fluent Builders
from("direct:start") .resequence().body() .to("mock:result");
This is equivalent to
from("direct:start") .resequence(body()).batch() .to("mock:result");
The batch-processing resequencer can be further configured via the
from("direct:start") .resequence(body()).batch().size(300).timeout(4000L) .to("mock:result")
This sets the batch size to 300 and the batch timeout to 4000 ms (by default, the batch size is 100 and the timeout is 1000 ms). Alternatively, you can provide a configuration object.
from("direct:start") .resequence(body()).batch(new BatchResequencerConfig(300, 4000L)) .to("mock:result")
So the above example will reorder messages from endpoint direct:a in order of their bodies, to the endpoint mock:result. Typically you'd use a header rather than the body to order things; or maybe a part of the body. So you could replace this expression with
for example to reorder messages using a custom sequence number in the header
Using the Spring XML Extensions
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start" /> <resequence> <simple>body</simple> <to uri="mock:result" /> <!-- batch-config can be omitted for default (batch) resequencer settings --> <batch-config batchSize="300" batchTimeout="4000" /> </resequence> </route> </camelContext>
batch mode, you can also reverse the expression ordering. By
default the order is based on 0..9,A..Z, which would let messages with low numbers be
ordered first, and thus also also outgoing first. In some cases you want to reverse order,
which is now possible.
In Java DSL there is a
reverse() method and in Spring XML there is an
reverse=true attribute on the
<batch-config/> you can use
to enable it.