I have done multi threading before but has been a while and need to refresh my memory and the best practice to do the following:

to process a high volume of input and output messages (messages would be placed in some form of queue and depending upon the type of message, it would request a certain "handler" to process that mesage. The "handler" would then place it into another processing queue for that type of message) - how would this be done and what would be the best way of doing this, making sure its scalable? What about making sure that this processing system is independant, more like an SOA/SAAS - should it be hosted as WCF? (I do think so but just curious, since there will be other "outsiders" consuming such a service)

To add complexity, what about dealing with transactional data in terms of the database? Making sure that things are being processed once and not multiple times (thread racing I guess)? So I may wish to CRUD that message - want to make sure that it is not done x amount of times (yes I know, perhaps place a lock around it but I want to make sure there is far less chance of this always being the case due to performance and scalability reasons)

Thanks