//public static IHostBuilder UseUdfsCluster(this IHostBuilder hostBuilder, Action<UdfsClusterOptions> configureDelegate) //{ // // Orleans configuration // return UseUdfsCluster(hostBuilder, configureDelegate, null); //} public static IHostBuilder UseUdfsCluster(this IHostBuilder hostBuilder, Action <UdfsClusterOptions> configureDelegate, Action <ISiloBuilder> builderDelegate) { hostBuilder.UseOrleans( (context, siloBuilder) => { // Requesting options var udfsOptions = new UdfsClusterOptions(); configureDelegate?.Invoke(udfsOptions); // Configure builder siloBuilder.ConfigureUdfs(udfsOptions); builderDelegate?.Invoke(siloBuilder); } ); return(hostBuilder); }
public static void ConfigureUdfs(this ISiloBuilder siloBuilder, UdfsClusterOptions udfsClusterOptions) { // Local or distribute cluster if (udfsClusterOptions.Membership.Enabled) { siloBuilder .UseAdoNetClustering(options => { options.Invariant = udfsClusterOptions.Membership.Provider; options.ConnectionString = udfsClusterOptions.Membership.ConnectionString; }) .Configure <EndpointOptions>(options => { options.AdvertisedIPAddress = udfsClusterOptions.EndPoint.AdvertisedIPAddress ?? IPAddress.Loopback; options.GatewayListeningEndpoint = udfsClusterOptions.EndPoint.GatewayListeningEndpoint; options.GatewayPort = udfsClusterOptions.EndPoint.GatewayPort; options.SiloListeningEndpoint = udfsClusterOptions.EndPoint.SiloListeningEndpoint; options.SiloPort = udfsClusterOptions.EndPoint.SiloPort; }); } else { siloBuilder.UseLocalhostClustering(); } // Cluster identity siloBuilder .Configure <ClusterOptions>(options => { options.ClusterId = udfsClusterOptions.ClusterService.ClusterId; options.ServiceId = udfsClusterOptions.ClusterService.ServiceId; }); // siloBuilder //.ConfigureLogging((hostingContext, logging) => //{ // //TODO: Logging slows down testing a bit. // //logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); // logging.AddConsole(); // logging.AddDebug(); // }) //.UsePerfCounterEnvironmentStatistics() //.Configure<SiloMessagingOptions>(options => //{ // options.ResponseTimeout = TimeSpan.FromSeconds(5); //}) //.Configure<GrainCollectionOptions>(options => //{ // // Set the value of CollectionAge to 10 minutes for all grain // options.CollectionAge = TimeSpan.FromMinutes(10); // // Override the value of CollectionAge to 5 minutes for MyGrainImplementation // // options.ClassSpecificCollectionAge[typeof(AdoNetOrleansSiloOptions).FullName] = TimeSpan.FromMinutes(5); //}); // Reminder if (udfsClusterOptions.Reminder.Enabled) { siloBuilder .UseAdoNetReminderService(options => { options.Invariant = udfsClusterOptions.Reminder.Provider; options.ConnectionString = udfsClusterOptions.Reminder.ConnectionString; }); } else { siloBuilder .UseInMemoryReminderService(); } // Storage if (udfsClusterOptions.Storage.Enabled) { siloBuilder .AddAdoNetGrainStorage(UdfsGrainStorages.UDFS_GRAIN_STORAGE, options => { options.Invariant = udfsClusterOptions.Storage.Provider; options.ConnectionString = udfsClusterOptions.Storage.ConnectionString; }); } else { siloBuilder.AddMemoryGrainStorage(UdfsGrainStorages.UDFS_GRAIN_STORAGE); } //if (context.HostingEnvironment.IsDevelopment()) // builder.UseDevelopmentOrleans(new IPEndPoint(6, 11111)); // Grains foreach (var item in udfsClusterOptions.GrainAssemblies) { siloBuilder.ConfigureApplicationParts(parts => parts.AddApplicationPart(item).WithReferences()); } // HealthChecks siloBuilder.UseUdfsClusterHealthChecks(); }