Your basic requirement is ,
- Get order from customer as XML ( you have not told how you are receiving)
- Do basic Business validation .
- Send the Orders to Suppliers
And you would be excepting 50k Request ( You haven't provided the approximate an Order size). Assuming your Average order size 10K, it would be around 500 MB required just to hold it in Queue ( irrespective of number of queues) . i am not sure which environment you are running.
For Point #1 I would choose single Queue instead of multiple Queue - Choose the appropriate persistent store. I am assuming you would be using Distributed Queue , so that it can be easily scale while adding clusters.
For Point #2 I would be converting in POJO (Your own format ) and perform business validation. So that later if you want to extend the business validation to ruler or any other conversion it would be easy to maintain. - basically get the input in any form ( XML / POJO / JSON ...) and convert into Middle format ( you can write custome validator / conversion utility on top of Middle fomart) . And have Keep Mappings between the Common format to input as well output. So that you can write formatters and use them. which will not impact in future while changing format for any specific supplier. Try to externalize the format mapping.
For Point # 3 in your case, A Order needs to be processed by only once. So i would go with Queue. and you can have multiple Message Listeners . Message listeners deliver order in asynchronous. So you can have multiple Listeners for an Queue. And each listeners would run separate thread. Is there a problem to send the orders as soon as it received ? It would be good for you as well as the supplier to avoid heavy load at particular time.