コード例 #1
0
ファイル: Extensions.cs プロジェクト: mengtest/XNode
        /// <summary>
        /// 获取Zookeeper客户端配置
        /// </summary>
        /// <param name="config">配置对象</param>
        /// <returns></returns>
        public static ZookeeperClientConfig GetZookeeperClientConfig(this IConfiguration config)
        {
            var zookeeperClientConfig = new ZookeeperClientConfig();

            config
            .GetSection("xnode:client:serviceDiscovery")
            .Bind(zookeeperClientConfig);
            return(zookeeperClientConfig);
        }
コード例 #2
0
ファイル: NodeClientManager.cs プロジェクト: mengtest/XNode
        /// <summary>
        /// 创建默认NodeClientFactory
        /// </summary>
        /// <param name="zookeeperClientConfig"></param>
        /// <param name="serializerList"></param>
        /// <param name="loggerFactory"></param>
        /// <returns></returns>
        public static Func <NodeClientArgs, IList <INodeClient> > CreateDefaultNodeClientFactory(ZookeeperClientConfig zookeeperClientConfig,
                                                                                                 IList <ISerializer> serializerList,
                                                                                                 ILoggerFactory loggerFactory)
        {
            IList <INodeClient> nodeClientFactory(NodeClientArgs args)
            {
                var serializer = serializerList.Where(s => s.Name == args.SerializerName).Single();

                ClientSecurityConfig loginHandlerConfig = null;

                if (zookeeperClientConfig.Security != null)
                {
                    loginHandlerConfig = zookeeperClientConfig.Security.Where(s => s.ServiceId == args.ServiceId).SingleOrDefault();
                    if (loginHandlerConfig == null)
                    {
                        loginHandlerConfig = zookeeperClientConfig.Security.Where(s => s.ServiceId == null).SingleOrDefault();
                        if (loginHandlerConfig == null)
                        {
                            throw new Exception("Not found default security configuration.");
                        }
                    }
                }

                ClientPassiveClosedStrategy passiveClosedStrategyConfig = null;

                if (zookeeperClientConfig.PassiveClosedStrategy != null)
                {
                    passiveClosedStrategyConfig = zookeeperClientConfig.PassiveClosedStrategy.Where(p => p.ServiceId == args.ServiceId).SingleOrDefault();
                    if (passiveClosedStrategyConfig == null)
                    {
                        passiveClosedStrategyConfig = zookeeperClientConfig.PassiveClosedStrategy.Where(p => p.ServiceId == null).SingleOrDefault();
                        if (passiveClosedStrategyConfig == null)
                        {
                            throw new Exception("Not found default passive closed strategy configuration.");
                        }
                    }
                }

                var builder = new NodeClientBuilder()
                              .ConfigConnections(args.ConnectionInfos)
                              .ConfigSerializer(serializer)
                              .UseDotNetty();

                if (loginHandlerConfig != null)
                {
                    builder.ConfigLoginHandler(new DefaultLoginHandler(loginHandlerConfig.Config, serializer));
                }

                if (passiveClosedStrategyConfig != null)
                {
                    builder.ConfigPassiveClosedStrategy(new DefaultPassiveClosedStrategy(passiveClosedStrategyConfig.Config, loggerFactory));
                }

                return(builder.Build());
            }

            return(nodeClientFactory);
        }