Ejemplo n.º 1
0
 /// <summary>
 ///     初始化属于指定服务角色的系统工作者
 /// </summary>
 /// <param name="role">服务角色</param>
 /// <param name="setting">远程配置设置</param>
 /// <param name="configurationProxy">远程配置站访问代理器</param>
 /// <param name="notificationHandler">异常通知处理器</param>
 /// <param name="proxy">KAE资源代理器</param>
 /// <exception cref="ArgumentNullException">参数不能为空</exception>
 public static void Initialize(string role, RemoteConfigurationSetting setting, IRemoteConfigurationProxy configurationProxy, ITracingNotificationHandler notificationHandler = null, IKAEResourceProxy proxy = null)
 {
     if (IsInitialized)
     {
         return;
     }
     if (setting == null)
     {
         setting = RemoteConfigurationSetting.Default;
     }
     if (proxy == null)
     {
         proxy = new KAEHostResourceProxy();
     }
     if (string.IsNullOrEmpty(role))
     {
         throw new ArgumentNullException(nameof(role));
     }
     if (configurationProxy == null)
     {
         throw new ArgumentNullException(nameof(configurationProxy));
     }
     SystemConfigurations.Initialize(role, setting, configurationProxy);
     _tracing = TracingManager.GetTracing(typeof(SystemWorker));;
     TransactionGlobal.Initialize();
     _configurationProxy = configurationProxy;
     _hostProxy          = proxy;
     TracingManager.NotificationHandler = notificationHandler ?? new RemoteLogProxy();
     InitializeCore(role);
     //initialize long...long memory buffer for tcp layer.
     ChannelConst.Initialize();
     _isInitialized   = true;
     IsInSpecifiedKPP = false;
 }
        /// <summary>
        ///     初始化
        /// </summary>
        public static void Initialize(string role, RemoteConfigurationSetting configSetting, IRemoteConfigurationProxy proxy)
        {
            if (string.IsNullOrEmpty(role))
            {
                throw new ArgumentNullException(nameof(role));
            }
            if (proxy == null)
            {
                throw new ArgumentNullException(nameof(proxy));
            }
            Dictionary <string, string> configurations = new Dictionary <string, string>();

            string[] sysConfigKeys = { "KJFramework.Net", "KJFramework.Net.Channels", "KJFramework.Net.Transaction" /*, "KJFramework.Data.Synchronization"*/ };
            foreach (string sysConfigKey in sysConfigKeys)
            {
                /*KJFramework.Net*/
                string configKey     = (configSetting.HasCustomizedKey(sysConfigKey) ? string.Format("{0}.{1}", role, sysConfigKey) : sysConfigKey);
                string configSection = proxy.GetPartialConfig(configKey);
                if (string.IsNullOrEmpty(configSection))
                {
                    throw new KeyNotFoundException(string.Format("#Sadly, we cannot found \"{0}\" keyword in remote configuration node.", configKey));
                }
                configurations.Add(string.Format("sys:{0}", sysConfigKey), configSection);
            }
            IConfigurationBuilder builder = new ConfigurationBuilder();

            configurations.Add("IO:Tracing:Level", "0");
            configurations.Add("IO:Tracing:Provider", "file");
            configurations.Add("IO:Tracing:Datasource", ".");
            builder.AddInMemoryCollection(configurations);
            Configuration = builder.Build();
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 加载后需要做的动作
 /// </summary>
 protected override void InnerOnLoading()
 {
     //Local configuration's CSN address is the highest priority option.
     if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["CSN"]))
     {
         _tracing.Info("#Use local configuration CSN address...");
         Console.WriteLine("     #Use local configuration CSN address...");
         _isInitialized = true;
         if (_serviceRole != "LGS")
         {
             SystemWorker.Instance.Initialize(_serviceRole, true, null, ConfigurationManager.AppSettings["CSN"]);
         }
         else
         {
             RemoteConfigurationSetting configurationSetting = new RemoteConfigurationSetting();
             configurationSetting.IsCustomizeKJFrameworkConfig       = true;
             configurationSetting.IsSpecific_Customer_Profile_Config = true;
             SystemWorker.Instance.Initialize("LGS", true, configurationSetting, null, ConfigurationManager.AppSettings["CSN"]);
         }
         CoreInnerOnLoading();
         CoreInnerStart();
     }
     else
     {
         _tracing.Info("     #Starting discovery mode and waiting specific event...");
         Console.WriteLine("     #Starting discovery mode and waiting specific event...");
         _inputPin = new DiscoveryInputPin(_monitorPort);
         //Discovery pattern.
         _inputPin.AddNotificationEvent("CSN", delegate(CommonBoradcastProtocol obj)
         {
             if (_isInitialized)
             {
                 return;
             }
             if (obj.Environment != _environment)
             {
                 return;
             }
             _tracing.Info("     #Discovery event had been received, running business component now...");
             Console.WriteLine("     #Discovery event had been received, running business component now...");
             _isInitialized = true;
             if (_serviceRole != "LGS")
             {
                 SystemWorker.Instance.Initialize(_serviceRole, true, null, obj.Value);
             }
             else
             {
                 RemoteConfigurationSetting configurationSetting         = new RemoteConfigurationSetting();
                 configurationSetting.IsCustomizeKJFrameworkConfig       = true;
                 configurationSetting.IsSpecific_Customer_Profile_Config = true;
                 SystemWorker.Instance.Initialize("LGS", true, configurationSetting, null, obj.Value);
             }
             CoreInnerOnLoading();
             CoreInnerStart();
             _tracing.Info("     #Business component run at discovery mode start succeed!");
             Console.WriteLine("     #Business component run at discovery mode start succeed!");
         });
     }
 }
Ejemplo n.º 4
0
 /// <summary>
 ///     Ads API项目的远程配置加载器
 /// </summary>
 /// <param name="setting">远程配置设置</param>
 public RemoteConfigurationLoader(RemoteConfigurationSetting setting)
 {
     if (setting == null)
     {
         throw new ArgumentNullException("setting");
     }
     _setting = setting;
 }
Ejemplo n.º 5
0
        /// <summary>
        ///     初始化属于指定服务角色的系统工作者
        /// </summary>
        /// <param name="role">服务角色</param>
        /// <param name="useRemoteConfig">是否使用远程配置的标示</param>
        /// <param name="setting">远程配置设置</param>
        /// <param name="notificationHandler">异常通知处理器</param>
        /// <param name="csnAddress">远程CSN的IP地址</param>
        /// <exception cref="ArgumentNullException">参数不能为空</exception>
        public void Initialize(string role, bool useRemoteConfig, RemoteConfigurationSetting setting, ITracingNotificationHandler notificationHandler = null, string csnAddress = null)
        {
            if (string.IsNullOrEmpty(role))
            {
                throw new ArgumentNullException("role");
            }
            if (useRemoteConfig && setting == null)
            {
                throw new ArgumentNullException("setting");
            }
            if (IsInitialized)
            {
                return;
            }
            _configurationProxy = (!useRemoteConfig ? (IRemoteConfigurationProxy) new RemoteConfigurationProxy(csnAddress) : new SolitaryRemoteConfigurationProxy(csnAddress));
            //Regist("LGS", new LGSProtocolStack());
            //TracingManager.NotificationHandler = notificationHandler ?? new RemoteLogProxy();
            Role = role;
            FixedTypeManager.Add(typeof(Color), 6);
            FixedTypeManager.Add(typeof(MessageIdentity), 5);
            FixedTypeManager.Add(typeof(TransactionIdentity), 18);
            IntellectTypeProcessorMapping.Instance.Regist(new MessageIdentityProcessor());
            IntellectTypeProcessorMapping.Instance.Regist(new TransactionIdentityProcessor());
            IntellectTypeProcessorMapping.Instance.Regist(new ColorIntellectPropertyProcessor());
            ExtensionTypeMapping.Regist(typeof(MessageIdentityValueStored));
            ExtensionTypeMapping.Regist(typeof(TransactionIdentityValueStored));
            //config remote configuration loader.
            if (useRemoteConfig)
            {
                KJFramework.Configurations.Configurations.RemoteConfigLoader = new RemoteConfigurationLoader(setting);
            }
            //initialize long...long memory buffer for tcp layer.
            ChannelConst.Initialize();
            CommonCounter.Instance.Initialize();
            // Init CSN
            Dictionary <string, int> maxRanges = new Dictionary <string, int>();
            Dictionary <string, ServiceCoreConfig[]> addresses = new Dictionary <string, ServiceCoreConfig[]>();

            InitCSN(addresses, maxRanges);
            _transactionManager         = new MessageTransactionManager(new TransactionIdentityComparer());
            _metadataTransactionManager = new MetadataTransactionManager(new TransactionIdentityComparer());
            _clsuter         = HashNetworkCluster.Create(_transactionManager, new IntellectObjectSystemConnectionPool(), addresses, maxRanges);
            _metadataCluster = MetadataContainerHashNetworkCluster.Create(_metadataTransactionManager,
                                                                          new MetadataSystemConnectionPool(),
                                                                          addresses, maxRanges);
            _syncProxy     = new RemoteDataSyncProxy();
            _isInitialized = true;
        }
 /// <summary>
 ///     远程配置设置
 /// </summary>
 static RemoteConfigurationSetting()
 {
     Default = new RemoteConfigurationSetting();
 }