public void TestRpcServer() { var methodNames = new string[] { "method1" , "method2" }; IRpcServer receiver = new RpcServer(_conn, methodNames, "rpc-test", parallelDegree: 10); receiver.RegisterMessageHandlerByAssembly(typeof(MessageHandler01).Assembly, "ERP.External.Commands"); receiver.OnMessageHandlingFailed += (sender, args) => { //TODO:持久化消息处理失败的信息,以备后续之后重试 }; var receiveMessageDict = new ConcurrentDictionary <string, Tuple <bool, IMessageTransportationContext> >(); receiver.OnMessageReceived += (sender, e) => { receiveMessageDict.TryAdd(e.Context.GetMessageId(), new Tuple <bool, IMessageTransportationContext>(false, e.Context)); }; receiver.OnMessageHandlingSucceeded += (sender, e) => { receiveMessageDict.AddOrUpdate(e.Context.GetMessageId(), new Tuple <bool, IMessageTransportationContext>(true, e.Context), (key, originVal) => new Tuple <bool, IMessageTransportationContext>(true, originVal.Item2)); }; //Task.Run(() => //{ // var timeout = 100; // var executeSeconds = 0; // while (receiveMessageDict.Count == 0 || receiveMessageDict.Values.Any(w => !w.Item1 && w.Item2.LastException == null)) // { // if (executeSeconds > timeout) // { // break; // } // Thread.Sleep(1000); // executeSeconds++; // } // var failList = receiveMessageDict.Values.Where(w => !w.Item1).ToList(); //}); receiver.ReceiveRequest(); }