Hi!
Maybe I don't understand fully your task, but what I see:
1. You need here: <dalayer>, <<aggregator>, MessageGroupStore, custom ReleaseStrategy, custom MessageGroupProcessor
2.
delay all messages for some period of time
Just to use <dalayer>: http://static.springsource.org/sprin...r.html#delayer
But with external message-store:
HTML Code:
<int:delayer id="delayer"
default-delay="1500"
message-store="delayerMessageStore">
3. Aggregator after dalayer: http://static.springsource.org/sprin...ml#aggregator:
HTML Code:
<aggregator correlation-strategy-expression="1"
release-strategy=""
ref=""/>
where:
- correlation-strategy-expression="1" it is some workaround, if you don't have any ability to group you incoming Messages. You should think here more: maybe you can find some external corellation. From other side there is an expire-groups-upon-completion="true"
4. Your custom ReleaseStrategy#canRelease should look in the delayerMessageStore on group delayer and compare messages via desired logic, e.g.:
C has served its delay, but can't be sent because A still isn't out of its delay perioud
For this sample it will be enough to check that there is no 'A' message in the delayer.
5. custom MessageGroupProcessor may just sort released messages in the appropriate order. And return a LinkedList<Message>.
6. In the end will work
Code:
for (Object next : (Iterable<?>) processorResult) {
this.sendReplyMessage(next, replyChannel);
}
Where your messages will be send to the outbound-channel one by one.
Hope I made some right point to start...
Take care,
Artem
P.S. Delayer MessageGroup became available from Spring Integration 2.2