One service will manage a Queue. The other will process items from the queue.
Service 1 = S1
Service 2 = S2
S1 will receive requests from clients, and will assign tasks to available instances of S2.
If all instances of S2 are busy, then S1 will add the items to the queue. These are long running tasks, anywhere between 5 seconds and 2 hours, so the queue will need to be stored in a SQL table, in case of hardware failure.
Once an item has been assigned to a S2 instance, S1 will need to check the progress of the work. I figure that checking the status every 5 minutes should be sufficient. If S1 is not able to get a response from an S2, then the task needs to be reassigned. Also, that S2 instance should not receive any further tasks, and an entry will need to be made on a table in SQL.
If the Task fails. The task should be marked as failed, and an entry will need to be made on a SQL table.
These are all windows services. All the communication between the services needs to be done using WCF, and TCP connections.
I will need to be able to launch several copies of S2 in the same PC. The goal would be one S2 per physical CPU core. I do not mind if the S2 are always on, but idle. I will need to be able to determine what each S2 is doing at any given time.
The system will have 2 S1s running at the same time, in a cluster of servers.
To process the tasks we will created a set of C# .Net 4.5 classes that the S2s will need to use. So, you will need to provide a public interface to load those classes.
10 freelancers are bidding on average $221 for this job
Very proficient in C++ and network programming. I have similar experience in my work. It is not hard for me to implement this system for you. Plz check the PM.
I'm an advanced c++ developer. I have 5 years of experience in c++ and service programming. I have developed many c++ and service programs. I have ability to do that. I'll satisfy you with your projects.