I have a stream of commands that needs to be processed in parallel for
performance reasons, and to be grouped on a key for sequential processing
to avoid conflicts.

I don't know the number of groups in advance. One way that came to my mind,
is dynamic channels/queues. So the stream of commands is sorted into
queues, where each queue represents a group. Then handle those
sequentially.

I have been looking at toD, and dynamic router, but no luck.
I am hoping to be able to achieve something like:

from("direct:commands")
.to("direct:${header.groupId})
.process(new MyProcessor())


Therefore processing commands in parallel, across all queues, while
blocking on the same queue.
If an error occurs, during the process of a command, I would like to be
able to flush/return the failed, and all the pending ones. In other words,
empty the queue.


How to achieve this ?
I am open for advice about better ideas/setup.

Reply via email to