Hi all, Let me describe my end-goal, and see what you all think:
I have this concept of a 'worker', which is on the consuming end of a JMS queue. The idea is that I'd like to have many of these workers deployed. At the same time, there are different types of work to be done, and a worker can do 1 or more of these types of work; however, I'd like to limit it such that a worker can only do 1 thing at once. So, a worker has capabilities that may or may not mesh with a task, and workers have a maximum number of concurrent tasks they can do. It seems to me the right thing to do is to have one queue per unit-of-work type. So if you are a worker and support 2 types of work, then you'd ultimately be listening to two queues. But, once you started working on one task pulled from one of the queues, it seems you'd want to dynamically stop listening to the other queue--and conversely, once the task is done, you'd start listening on that queue again. But right away I'm concerned how one could guarantee just one message is read from either queue at a time. Another scenario is if no workers are currently available that can handle a particular type of task because they are all busy, but there are other things to do in the queue. So in that case, with the first message that no one can currently handle, I'd like to put it back on the queue (or you could say, just never take it off the queue), but push it back so I can have the available workers look at the next messages in line. You can see, though, how eventually there could be an issue if there were even two items in the queue, and they both are unable to be processed at the moment because all the workers are busy. With the reordering of the queue suggestion, you could quickly get into a situation where the queue is read and thrashed at a high rate unless something throttles this behavior. Any suggestions as to what I could look at? I'm not seeing anything on the JMS Camel page, or anything in the *Processors that might be of help, but I'm also concerned I'm going about this the wrong way. I realize this is a possibly very loaded question and help may not be forthcoming. But I thought I'd ask. Regards, Seth