Looks good guys, nice job. Love the message routing. Nice and simple.
What about adding support for a Message Group ID, along the lines of the JMS Message Group ID to the Message Header? This would compliment Sequence Number and Size nicely. Then Spring Integration would have been a nice alternate solution to this posting:
This idea fits well with the Aggregator pattern which will be added to Spring Integration in the M2 timeframe. The basic idea is to provide a strategy interface for the "barrier" to enable customized implementations of what it means to be complete (e.g. wait for all, wait for at least N, wait for an "accepted" reply, etc.) - and then another strategy for something like: aggregate(messages).
In the core, we will provide some common implementations - such as one that references sequenceSize + correlationId, but it will also be simple to implement custom barriers. Since correlationId might be used for other purposes (e.g. the ultimate reply), I have considered adding a "sequenceId" header property as well - but then not all Aggregators necessarily care about a sequence, so something more generic (like 'groupId') does make sense. In fact, while an aggregator may be capable of preserving the sequence, the Resequencer is a separate pattern for sending the messages one at a time in their original order (we will be implementing that as well).
Anyways, the implementation of this will begin very soon, so I really appreciate the ideas, and please do check out the code during the M2 timeframe and feel free to offer more feedback as the implementation evolves.