We are trying to improve the responsiveness of some bulk message processes such that a large batch does not flood a queue and prevent subsequent smaller batches getting through in a timely fashion. For example, a job to import millions of records from CSV may take an hour but a smaller job to import just one thousand records should be able to begin processing immediately in parallel instead of being sent to the back of a very long queue.

This seems to me like the sort of thing Camel should be good at but I have so far not been about to see how this could be achieved. The idea we have in mind is to have a queue with limited size that will block when it is full so that the rate of queuing from a large batch would be limited to consumer capacity. Subsequent batches would have equal opportunity to get the next message on to the queue.

At first I thought the Camel maxInflightExchanges property could be used for this but I don't think it has this affect. Is there a way a Camel route can inspect the size of the target queue to decide whether to suspend or resume?

Perhaps a message broker can help solve this with either blocking queues or virtual aggregate queues but I haven't found these in RabbitMQ or ActiveMQ.

Does anyone have any advice on a way solve this problem with Camel or otherwise?

 - Nathan

Reply via email to