private async Task ProductionConfiguration(OrleansOptions options) { this._logging.Info("使用生产环境配置Silo"); await options.GrainNames.ForEachAsync(async kv => { this._logging.Info($"创建'{options.ClusterId}'-'{kv.Key}'筒仓服务"); var silo = this.DefaultConfiguration(options) .UseZooKeeperClustering(zooKeeperOptions => { zooKeeperOptions.ConnectionString = options.ZooKeeperConnectionString; }) .Configure <ClusterOptions>(clusterOptions => { clusterOptions.ClusterId = options.ClusterId; clusterOptions.ServiceId = kv.Key.ToLower(); }) .ConfigureLogging(configure => configure.SetMinimumLevel(LogLevel.Information)) .Build(); var siloService = new SiloService(silo); await siloService.StartAsync(); this._logging.Info($"筒仓'{options.ClusterId}'-'{kv.Key}'已启动"); this._dictionary.TryAdd(kv.Key, siloService); }); }
private async Task DevelopmentConfiguration(OrleansOptions options) { this._logging.Warn("使用开发环境配置Silo"); var ports = Enumerable.Range(Constants.MasterSiloPort, Constants.MasterGatewayPort - Constants.MasterSiloPort - 1) .ToList(); await options.GrainNames.ForEachAsync(async kv => { this._logging.Info($"创建'{options.ClusterId}'-'{kv.Key}'筒仓服务"); var points = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners(); var index = ports.FindIndex(s => !points.Any(p => p.Port == s)); while (true) { try { var siloPort = Constants.MasterSiloPort + index; var gatewayPort = Constants.MasterGatewayPort + index; var iPEndPoint = gatewayPort == Constants.MasterGatewayPort ? null : new IPEndPoint(IPAddress.Loopback, Constants.MasterSiloPort); this._logging.Info($"筒仓端口'{siloPort}',网关端口:'{gatewayPort}'"); var silo = this.DefaultConfiguration(options) .UseLocalhostClustering(siloPort, gatewayPort, iPEndPoint) .Configure <ClusterOptions>(clusterOptions => { clusterOptions.ClusterId = options.ClusterId; clusterOptions.ServiceId = kv.Key.ToLower(); }) .ConfigureLogging(configure => configure.SetMinimumLevel(LogLevel.Debug)) .Build(); var siloService = new SiloService(silo); await siloService.StartAsync(); this._logging.Info($"筒仓'{options.ClusterId}'-'{kv.Key}'已启动"); this._dictionary.TryAdd(kv.Key, siloService); break; } catch (Exception ex) { _logging.Error($"端口{Constants.MasterSiloPort + index}已被监听重新选择端口'{ex.Message}'", ex); index++; } } }); }