Ejemplo n.º 1
0
        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);
            });
        }
Ejemplo n.º 2
0
        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++;
                    }
                }
            });
        }