private void OnSended(DistributedEventArgs e) { if (Distributed != null) { Distributed(this, e); } }
private void Run() { try { while (true) { if (!IsRuning) { return; } if (IsSleeping) { OnWaked(new EventArgs()); } IList<MessageEntity> toDistributes = this.Ontology.MessageProvider.GetTopNCommands(MessageTypeKind.Distribute, this.Ontology, this.Ontology.Ontology.DispatcherLoadCount, "CreateOn", "asc"); if (toDistributes == null || toDistributes.Count == 0) { Sleep(new SleepingEventArgs(this.Ontology.Ontology.DispatcherSleepTimeSpan)); continue; } else { if (toDistributes.Count <= 0) continue; // 根据ClientID分组命令消息,即把应发送到相同节点的命令消息分在同一组 var commandGroups = toDistributes.GroupBy(a => a.ClientId.ToLower()); foreach (var g in commandGroups) { foreach (var item in g) { NodeDescriptor responder; _acDomain.NodeHost.Nodes.TryGetNodeById(item.ClientId, out responder); var eArg = new DistributedEventArgs(new DistributeContext(item, responder)); OnSending(eArg); MessageRequester.Instance.Request(eArg.Context); var result = eArg.Context.Result; // 处理发送结果 int stateCode = result.Status; if (stateCode >= 200 && stateCode < 400) { SucessCount += 1; } else { FailCount += 1; if (stateCode == (int)Status.InternalServerError || stateCode < 200) { OnError(new ExceptionEventArgs( new AnycmdException( stateCode + result.ReasonPhrase + result.Description)) { ExceptionHandled = false }); Sleep(new SleepingEventArgs(this.Ontology.Ontology.DispatcherSleepTimeSpan)); } } eArg.DistributedOn = DateTime.Now; OnSended(eArg); } } } } } catch (Exception ex) { OnError(new ExceptionEventArgs(ex) { ExceptionHandled = false }); throw; } }
private void Run() { try { while (true) { if (!IsRuning) { return; } if (IsSleeping) { OnWaked(new EventArgs()); } IList <MessageEntity> toDistributes = this.Ontology.MessageProvider.GetTopNCommands(MessageTypeKind.Distribute, this.Ontology, this.Ontology.Ontology.DispatcherLoadCount, "CreateOn", "asc"); if (toDistributes == null || toDistributes.Count == 0) { Sleep(new SleepingEventArgs(this.Ontology.Ontology.DispatcherSleepTimeSpan)); continue; } else { if (toDistributes.Count <= 0) { continue; } // 根据ClientID分组命令消息,即把应发送到相同节点的命令消息分在同一组 var commandGroups = toDistributes.GroupBy(a => a.ClientId.ToLower()); foreach (var g in commandGroups) { foreach (var item in g) { NodeDescriptor responder; _acDomain.NodeHost.Nodes.TryGetNodeById(item.ClientId, out responder); var eArg = new DistributedEventArgs(new DistributeContext(item, responder)); OnSending(eArg); MessageRequester.Instance.Request(eArg.Context); var result = eArg.Context.Result; // 处理发送结果 int stateCode = result.Status; if (stateCode >= 200 && stateCode < 400) { SucessCount += 1; } else { FailCount += 1; if (stateCode == (int)Status.InternalServerError || stateCode < 200) { OnError(new ExceptionEventArgs( new GeneralException( stateCode + result.ReasonPhrase + result.Description)) { ExceptionHandled = false }); Sleep(new SleepingEventArgs(this.Ontology.Ontology.DispatcherSleepTimeSpan)); } } eArg.DistributedOn = DateTime.Now; OnSended(eArg); } } } } } catch (Exception ex) { OnError(new ExceptionEventArgs(ex) { ExceptionHandled = false }); throw; } }