/// <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); }
/// <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); }