private static void SharedWorker() { var workMethod = new Func <CommonRequest, bool>(r => { var message = r.Message; Console.WriteLine("[{2}] Received from {0}, message {1}", r.ClientId.ToPrintable(), r.RequestId, DateTime.Now.ToLongTimeString()); Console.WriteLine("[x] Working {0}ms", r.Duration); Thread.Sleep(r.Duration); Console.WriteLine("[x] Done"); var qName = string.Format("{0}_queue", r.ClientId.ToString()); var publisher = new Common.SharedWorker.Producer <CommonReply>("localhost", qName); publisher.Publish(new CommonReply { ClientId = r.ClientId, ReplyId = r.RequestId, Success = true }); return(true); }); Console.WriteLine("[*] Waiting for messages. To exit press CTRL+C"); //var consumer = new Common.PubSub.Consumer(); var consumer = new Common.SharedWorker.Consumer <CommonRequest>(); consumer.Start(workMethod); }
private static void SharedWorker() { int msgCount = 10; Guid clientId = Guid.NewGuid(); var messagesToSend = new List <CommonRequest>(); var receivedMessages = new List <int>(); for (int i = 0; i < msgCount; i++) { messagesToSend.Add(new CommonRequest { ClientId = clientId, RequestId = i, Message = "Hello: " + i, Duration = 5000 }); } Console.WriteLine("Client {0}", clientId.ToPrintable()); var senderTask = Task.Factory.StartNew(() => { // Broadcast to all //var producer = new Common.PubSub.Producer(); // Send only to one at a time var producer = new Common.SharedWorker.Producer <CommonRequest>(); foreach (var msg in messagesToSend) { producer.Publish(msg); Console.WriteLine("[x] Sent {0}", msg.RequestId); Thread.Sleep(2000); } Console.WriteLine("Sent all"); }); var receiverTask = Task.Factory.StartNew(() => { var qName = string.Format("{0}_queue", clientId.ToString()); var consumer = new Common.SharedWorker.Consumer <CommonReply>("localhost", qName); var func = new Func <CommonReply, bool>(r => { Console.WriteLine("[{1}] Received {0}", r.ReplyId, DateTime.Now.ToLongTimeString()); receivedMessages.Add(r.ReplyId); if (receivedMessages.Count == messagesToSend.Count) { consumer.Stop(); } return(true); }); consumer.Start(func); }); while (receivedMessages.Count != messagesToSend.Count) { Thread.Sleep(500); } //Task.WaitAll(senderTask, receiverTask); Console.WriteLine("Press any key to quit"); Console.ReadLine(); }