/// <summary> /// 增对不同的客户端和消息类型进行处理 /// </summary> /// <param name="regClient"></param> /// <param name="regMessage"></param> public void Process(RegistryClient regClient, CometMessage regMessage) { if (regMessage.Action == CometMessageAction.Hello) { ConsumerConfig consumerConfig = XmlUtil.LoadObjFromXML <ConsumerConfig>(regMessage.MessageBody); regClient.ConsumerConfig = consumerConfig; regClient.ProcessorID = regMessage.ProcessorID; regClient.DotNetFramworkVersion = regMessage.DotNetFramworkVersion; regClient.OSVersion = regMessage.OSVersion; regClient.ClientApplicationName = consumerConfig.ApplicationName; ESBConfig esbConfig = GetESBConfig(regClient); m_RegistryCenter.SendData(regClient, CometMessageAction.ServiceConfig, esbConfig.ToXml(), regMessage.IsAsync); } else if (regMessage.Action == CometMessageAction.ListRegistryClient) { String message = XmlUtil.SaveXmlFromObj <List <RegistryClient> >(m_RegistryCenter.RegistryClients); m_RegistryCenter.SendData(regClient, CometMessageAction.ListRegistryClient, message, regMessage.IsAsync); } else if (regMessage.Action == CometMessageAction.ResendConfig)//--管理中心向每个客户端发送配置文件 { foreach (var item in m_RegistryCenter.RegistryClients) { if (item.RegistryClientType == CometClientType.Consumer || item.RegistryClientType == CometClientType.CallCenter || item.RegistryClientType == CometClientType.Monitor || item.RegistryClientType == CometClientType.QueueCenter || item.RegistryClientType == CometClientType.Portal) { ESBConfig esbConfig = GetESBConfig(item); m_RegistryCenter.SendData(item, CometMessageAction.ServiceConfig, esbConfig.ToXml()); } } } }
/// <summary> /// 增对不同的客户端和消息类型进行处理 /// </summary> /// <param name="regClient"></param> /// <param name="regMessage"></param> public void Process(RegistryClient regClient, RegistryMessage regMessage) { if (regMessage.ClientType == RegistryClientType.Consumer && regMessage.Action == RegistryMessageAction.Hello) { ConsumerConfig consumerConfig = XmlUtil.LoadObjFromXML <ConsumerConfig>(regMessage.MessageBody); ESBConfig esbConfig = GetESBConfig(consumerConfig); m_RegistryCenter.SendData(regClient, RegistryMessageAction.ServiceConfig, esbConfig.ToXml()); } }
/// <summary> /// 获取到ESBConfig /// </summary> /// <returns></returns> private ESBConfig GetESBConfig(ConsumerConfig consumerConfig) { ESBConfig esbConfig = new ESBConfig(); esbConfig.Service.Add(new ServiceItem() { ServiceName = "ESB_ASHX", DirectInvokeEnabled = true, Uri = "http://esb.jn.com" }); return(esbConfig); }
/// <summary> /// 加载配置文件:加载本地配置文件ConsumerConfig->ESBConfig /// </summary> private void LoadConfig() { m_ConfigurationManager = ConfigurationManager.GetInstance(); m_ConsumerConfig = m_ConfigurationManager.LoadConsumerConfig(); m_ESBConfig = m_ConfigurationManager.LoadESBConfig(); if (m_ConsumerConfig == null) { throw new Exception("缺少有效的消费者配置文件ConsumerConfig.xml。"); } if (m_ESBConfig == null) { Status = ESBProxyStatus.LostESBConfig; } else { Status = ESBProxyStatus.Ready; } }
/// <summary> /// 构造器 /// </summary> public RabbitQueueManager() { ESBConfig esbConfig = m_ESBProxy.RegistryConsumerClient.ESBConfig; if (esbConfig != null && esbConfig.MessageQueue.Count > 0) { //String esbQueue = Config.GetConfig<String>("ESB.Queue"); String esbQueue = esbConfig.MessageQueue[0].Uri; XTrace.WriteLine("读取到ESB队列地址:{0}", esbQueue); String[] paramMQ = esbQueue.Split(':'); m_RabbitMQ = new RabbitMQClient(paramMQ[0], paramMQ[2], paramMQ[3], Int32.Parse(paramMQ[1])); } else { String err = "无法获取到有效的队列地址!"; XTrace.WriteLine(err); throw new Exception(err); } }
/// <summary> /// 构造器 /// </summary> public RabbitQueueManager() { m_EsbConfig = m_ESBProxy.RegistryConsumerClient.ESBConfig; m_ConsumerConfig = m_ESBProxy.RegistryConsumerClient.ConsumerConfig; m_QueueThreadDict = new Dictionary <String, QueueThread>(); if (m_EsbConfig != null && m_EsbConfig.MessageQueue.Count > 0) { //String esbQueue = Config.GetConfig<String>("ESB.Queue"); String esbQueue = m_EsbConfig.MessageQueue[0].Uri; XTrace.WriteLine("读取到ESB队列地址:{0}", esbQueue); m_ParamMQ = esbQueue.Split(':'); } else { String err = "无法获取到有效的队列地址!"; XTrace.WriteLine(err); throw new Exception(err); } }
/// <summary> /// 获取到ESBConfig /// </summary> /// <returns></returns> private ESBConfig GetESBConfig(RegistryClient regClient) { ConsumerConfig consumerConfig = regClient.ConsumerConfig; ESBConfig esbConfig = new ESBConfig(); //--处理中心地址 foreach (SettingUri uri in SettingUri.FindAll()) { switch (uri.UriType) { case 0: //--注册中心 esbConfig.Registry.Add(new RegistryItem() { Uri = String.Format("{0}:{1}", uri.Uri, uri.Port), Load = 1 }); break; case 1: //--监控中心 esbConfig.Monitor.Add(new MonitorItem() { Uri = String.Format("{0}:{1}", uri.Uri, uri.Port), Load = 1 }); break; case 2: //--调用中心 esbConfig.CallCenter.Add(new CallCenterItem() { Uri = uri.Uri, Load = 1 }); break; case 3: //--队列中心 esbConfig.MessageQueue.Add(new MessageQueueItem() { Uri = String.Format("{0}:{1}:{2}:{3}", uri.Uri, uri.Port, uri.UserName, uri.PassWord), Load = 1 }); break; case 4: //--缓存中心 esbConfig.Cache.Add(new CacheItem() { Uri = String.Format("{0}:{1}", uri.Uri, uri.Port), Load = 1 }); break; default: break; } } //--处理服务 if (regClient.RegistryClientType == CometClientType.Consumer || regClient.RegistryClientType == CometClientType.Portal || regClient.RegistryClientType == CometClientType.Monitor) { foreach (var refService in consumerConfig.Reference) { List <EsbView_ServiceVersion> lstBS = EsbView_ServiceVersion.FindAllPublish(); foreach (EsbView_ServiceVersion bs in lstBS.Where(x => x.ServiceName == refService.ServiceName)) { ServiceItem si = new ServiceItem(); si.ServiceName = bs.ServiceName; si.Version = bs.BigVer; si.Binding = bs.Binding; si.IsDefault = (bs.BigVer == bs.DefaultVersion); esbConfig.Service.Add(si); } } } else if (regClient.RegistryClientType == CometClientType.CallCenter || regClient.RegistryClientType == CometClientType.QueueCenter) { EntityList <EsbView_ServiceVersion> lstBS = EsbView_ServiceVersion.FindAllPublish(); foreach (var bs in lstBS) { ServiceItem si = new ServiceItem(); si.ServiceName = bs.ServiceName; si.Version = bs.BigVer; si.Binding = bs.Binding; si.IsDefault = (bs.BigVer == bs.DefaultVersion); esbConfig.Service.Add(si); } } //--处理服务配置 if (regClient.RegistryClientType == CometClientType.Consumer || regClient.RegistryClientType == CometClientType.Portal || regClient.RegistryClientType == CometClientType.Monitor) { List <EsbView_ServiceConfig> lstSC = EsbView_ServiceConfig.FindAll(); foreach (var refService in consumerConfig.Reference) { List <EsbView_ServiceConfig> scs = lstSC.FindAll(x => x.ServiceName == refService.ServiceName); foreach (EsbView_ServiceConfig sc in scs) { esbConfig.ServiceConfig.Add(sc); } } } else if (regClient.RegistryClientType == CometClientType.CallCenter || regClient.RegistryClientType == CometClientType.QueueCenter) { esbConfig.ServiceConfig = EsbView_ServiceConfig.FindAll(); } return(esbConfig); }
/// <summary> /// 订阅注册中心的服务变化事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RegistryConsumerClient_OnServiceConfigChange(object sender, ESB.Core.Registry.RegistryEventArgs e) { m_EsbConfig = e.ESBConfig; ConfigQueueThread(); }
/// <summary> /// 加载配置文件:加载本地配置文件ConsumerConfig->ESBConfig /// </summary> private void LoadConfig() { m_ConfigurationManager = ConfigurationManager.GetInstance(); m_ConsumerConfig = m_ConfigurationManager.LoadConsumerConfig(); m_ESBConfig = m_ConfigurationManager.LoadESBConfig(); }