Esempio n. 1
0
        public async Task <StatisticsClient> StartClientWithRetries()
        {
            _attempt = 0;
            _siloSettings.SiloAddresses ??= new List <string>();
            _siloSettings.SiloAddresses.Add(IpUtils.IpAddress().ToString());

            var innerClient = new ClientBuilder()
                              .UseStaticClustering(_siloSettings.SiloAddresses.Select(a => new IPEndPoint(IPAddress.Parse(a), _siloSettings.SiloPort)).ToArray())
                              .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = _oskSettings.ClusterId;
                options.ServiceId = _oskSettings.ServiceId;
            })
                              .ConfigureLogging(logging => logging.AddConsole())
                              .AddSimpleMessageStreamProvider("OSKProvider")
                              .Build();

            await innerClient.Connect(RetryFilter);

            Console.WriteLine("Client successfully connect to silo host");

            return(new StatisticsClient(innerClient, new NLogLogger(LogManager.GetCurrentClassLogger())));
        }
Esempio n. 2
0
        public static Task Main(string[] args)
        {
            var oskSettings  = new OskSettings();
            var siloSettings = new SiloSettings();

            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json", true, true)
                                .Build();

            configuration.GetSection("OskSettings").Bind(oskSettings);
            configuration.GetSection("SiloSettings").Bind(siloSettings);

            if (siloSettings.MaxCpuLoad < 100)
            {
                Task.Run(() => CpuOptimizer.Start(siloSettings.MaxCpuLoad, new CancellationToken()));
            }

            return(new HostBuilder()
                   .UseOrleans(builder =>
            {
                builder.UseLocalhostClustering()
                .ConfigureServices(services =>
                {
                    services.AddMongoUtils();
                    services.AddSingleton(oskSettings);
                    services.AddSingleton(siloSettings);
                    services.AddScoped <IAsyncLogger, NLogLogger>();
                    services.AddSingleton <IAssemblyCache, MemoryAssemblyCache>();
                    services.AddSingleton <IAssemblyMembersCache, MemoryAssemblyMembersCache>();
                })
                .Configure((Action <SchedulingOptions>)(options => options.AllowCallChainReentrancy = false))
                .Configure((Action <ClusterOptions>)(options =>
                {
                    options.ClusterId = oskSettings.ClusterId;
                    options.ServiceId = oskSettings.ServiceId;
                }))
                .Configure((Action <EndpointOptions>)(options => options.AdvertisedIPAddress = IpUtils.IpAddress()))
                .ConfigureApplicationParts(parts => AddParts(parts, siloSettings).WithReferences())
                .UseDashboard(options => {
                    options.Host = "*";
                    options.Port = 8080;
                    options.HostSelf = true;
                    options.CounterUpdateIntervalMs = 1000;
                })
                .AddMemoryGrainStorage(name: "StatisticsGrainStorage")
                .AddSimpleMessageStreamProvider("OSKProvider", c => c.OptimizeForImmutableData = true);
            })
                   .ConfigureLogging(builder => builder.AddConsole())
                   .RunConsoleAsync());
        }