static void Main(string[] args) { // 1. Set delegate workder function ImplementDoWorkFunction implement=new ImplementDoWorkFunction(); BackgroundWorkerService.Instance().DoworkDelegateFunc += implement.ImplementFunctionDowork; // 2. Start Worker => When worker running the worker will get each message from Queue to process BackgroundWorkerService.Instance().Start(); // 3. Demo how it work to handle multiple concurrency // Create sample pull client request // Each MessageAction is example for each Client request. // MessageAction is the class object that will contain most Client request infomation // to use to process ansync in Background worker MessageAction item1 = new MessageAction("1", "XXX1"); MessageAction item2 = new MessageAction("2", "XXX2"); MessageAction item3 = new MessageAction("3", "XXX3"); MessageAction item4 = new MessageAction("4", "XXX4"); // Test retry failed with this item // Example item5 always send failed, and just allow retry maximun 3 times MessageAction item5 = new MessageAction("5", "XXX5"); // In this case Server do not process immediately Client request, all request will be put into Queue QueueMessageManager.Instance().AddMessage(item1); QueueMessageManager.Instance().AddMessage(item2); QueueMessageManager.Instance().AddMessage(item3); QueueMessageManager.Instance().AddMessage(item4); QueueMessageManager.Instance().AddMessage(item5); Console.ReadLine(); }
private void SimulateSendFail(MessageAction message) { // Example simulate meesage ID=5 always send failed if (message.ID.Equals("5") && message.CurrentFailedToReTry < 3) { message.StausFailed = true; QueueMessageManager.Instance().AddMessage(message); } }
// This is the mail function process send message to client. public void ImplementFunctionDowork(MessageAction message) { if (message.StausFailed) { message.CurrentFailedToReTry ++; Console.WriteLine("Re try send last fail message, ID=" + message.ID + " |number of fail retry: " + message.CurrentFailedToReTry.ToString() + " |Max time to retry"+ maxRetryFail.ToString()); } //TODO // This implementation to process message Queue Console.WriteLine("Worker is processing do job send message: "+message.ID +"-"+message.Info); // Test example send failed message then add back to queue to retry SimulateSendFail(message); }