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