title: Asynchronous message processing with Camel
body: <p>I need help in finding out the best solution for following design problem.</p>
  
  <p>I have a single front-end server which is used by our users. They submit  tasks which are supposed to run asynchronously and send an email when it gets completed. The task does the of  calling external API and update something there. There are accounts (not to be confused by user account) associated with an API. User will run a task for a particular account and once that account is engaged while doing api update, other tasks which want to update the API with same account has to wait. Please note that, uses doesn't have to wait, they might submit many tasks for the same (api) account. It is the system which will take care of putting tasks in Queue.
  Queue will be listened by bunch of servers and as soon as account is freed up , next task will take will be picked up by some other server. Thus, we have multiple tasks submitted, updating api for multiple accounts.
  I am looking at the Apache Camel as my solution to this, where front-end will submit the task on the bus and one of the servers will pick it up . However, If more than one tasks come for same account, only one can be executed as explained above, I want to keep the other task(s) for same account somewhere in the queue  (I am not sure how should I do that ) and as soon the account  is freed up the next message should be picked by one of the server in the cluster.
  Any suggestion on better solution, not even sure if Camel is best one for this kind of problem. I am new to this kind of asynchronous design problem.</p>