public void Process(DistributedEvent dEvent) { string address = string.Empty; Type type = null; object eventMessage = null; try { address = SubscriptionManager.EventTransport.GetEventServerAddress(); type = _subscriptionService.GetTopicConsumerType(dEvent.Topic, dEvent.ObjectName); eventMessage = dEvent.GetValue(type); if (!_subscriptionService.HasTopicConsumer(dEvent.Topic)) { EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,执行请求远程通信,主题不存在,地址:{0},对象名:{1}", address, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, eventMessage); return; } } catch (Exception ex) { _logger.Error("获取事件对象类型错误", ex); EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,准备执行请求远程通信错误,地址:{0},对象名:{1}", address, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, dEvent, ex); return; } EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,执行请求远程通信,地址:{0},对象名:{1}", address, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, eventMessage); try { EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,本地通知开始,地址:{0},对象名:{1}", address, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, eventMessage); var subscriptions = _subscriptionService.GetDistributedSubscriptions(dEvent.Topic, dEvent.ObjectName); subscriptions.ToList().ForEach(x => PublishToConsumer(address, dEvent.ObjectName, dEvent.Topic, x.Consumer, x.HandleType, eventMessage, dEvent.Lable)); EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,本地通知完成,地址:{0},对象名:{1}", address, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, eventMessage); } catch (Exception ex) { _logger.Error(string.Format("获取订阅对象错误,主题:{0},对象名称:{1},数据:{2}", dEvent.Topic, dEvent.ObjectName, dEvent.GetJsonString()), ex); } }
private bool SendEventMessage(DistributedEvent dEvent, string address) { int index = 0; while (index <= 2) { var publisherStatus = GetEventPublisher(dEvent.Topic, address); if (publisherStatus.ErrorCount > 2) { if (RemoveEventPublisher(dEvent.Topic, address)) { publisherStatus = GetEventPublisher(dEvent.Topic, address); } } try { publisherStatus.EventPublisher.Process(dEvent); return(true); } catch (EndpointNotFoundException) { if (!sourceArrays.IsAddingCompleted) { sourceArrays.Add(new ClearRegisteredConsumer { Topic = dEvent.Topic, Address = address }); } return(false); } catch (Exception ex) { publisherStatus.Error(); EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,请求远程通信错误,地址:{0},对象名:{1},重试第{2}次", address, dEvent.ObjectName, index + 1), dEvent.Topic, dEvent.Lable, dEvent.GetValue(), ex); } index++; } return(false); }
public bool SendEventMessage(DistributedEvent dEvent, DistributedConsumerType consumerType) { try { bool hasError = false; var list = GetConsumerAddress(dEvent.Topic); if (list.Count() == 0) { EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,没有检测到任何分布式订阅对象,通知已退出,对象名:{0}", dEvent.ObjectName), dEvent.Topic, dEvent.Lable, dEvent.GetValue()); return(true); } foreach (var item in list) { bool flag = false; var address = string.Format("{0}:{1}", GetIntranetIp(), this._port); if (item == address) { continue; } EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,请求远程通信,地址:{0},对象名:{1}", item, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, dEvent.GetValue()); flag = SendEventMessage(dEvent, item); if (flag) { EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,请求远程通信完成,地址:{0},对象名:{1}", address, dEvent.ObjectName), dEvent.Topic, dEvent.Lable, dEvent.GetValue()); if (consumerType == DistributedConsumerType.OnlyOne) { break; } } else { hasError = true; } } EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,请求远程通信完成,对象名:{0}", dEvent.ObjectName), dEvent.Topic, dEvent.Lable, dEvent.GetValue()); return(hasError == true ? false : true); } catch (Exception ex) { EventPublisher.WriteTrackLog(string.Format("发布分布式事件通知,请求远程通信错误,对象名:{0}", dEvent.ObjectName), dEvent.Topic, dEvent.Lable, dEvent.GetValue(), ex); } return(false); }