public static Task Main() { var advertisedIp = Environment.GetEnvironmentVariable("ADVERTISEDIP"); var advertisedIpAddress = advertisedIp == null?GetLocalIpAddress() : IPAddress.Parse(advertisedIp); var extractedGatewayPort = Environment.GetEnvironmentVariable("GATEWAYPORT") ?? throw new Exception("Gateway port cannot be null"); var extractedSiloPort = Environment.GetEnvironmentVariable("SILOPORT") ?? throw new Exception("Silo port cannot be null"); var extractDashboardPort = Environment.GetEnvironmentVariable("DASHBOARDPORT") ?? throw new Exception("Dashboard port cannot be null"); var extractedPrimaryPort = Environment.GetEnvironmentVariable("PRIMARYPORT") ?? throw new Exception("Primary port cannot be null"); // For the sake of simplicity, a primary silo is used here (even though all silos are peers in the cluster) as in-memory cluster membership emulation was utilised in this example. // If the primary address is not provided, we're assuming all silos in the cluster are running under one IP. var primaryAddress = Environment.GetEnvironmentVariable("PRIMARYADDRESS"); var siloPort = int.Parse(extractedSiloPort); var developmentPeerPort = int.Parse(extractedPrimaryPort); var gatewayPort = int.Parse(extractedGatewayPort); var dashboardPort = int.Parse(extractDashboardPort); var primaryIp = primaryAddress == null ? advertisedIpAddress : IPAddress.Parse(primaryAddress); var primarySiloEndpoint = new IPEndPoint(primaryIp, developmentPeerPort); var siloEndpointConfiguration = new SiloEndpointConfiguration(advertisedIpAddress, siloPort, gatewayPort); return(new HostBuilder() .UseOrleans(siloBuilder => { siloBuilder.UseLinuxEnvironmentStatistics(); siloBuilder.UseDashboard(dashboardOptions => { dashboardOptions.Username = "******"; dashboardOptions.Password = "******"; dashboardOptions.Port = dashboardPort; }); siloBuilder.UseDevelopmentClustering(primarySiloEndpoint); siloBuilder.Configure <ClusterOptions>(clusterOptions => { clusterOptions.ClusterId = "cluster-of-silos"; clusterOptions.ServiceId = "hello-world-service"; }); siloBuilder.Configure <EndpointOptions>(endpointOptions => { endpointOptions.AdvertisedIPAddress = siloEndpointConfiguration.Ip; endpointOptions.SiloPort = siloEndpointConfiguration.SiloPort; endpointOptions.GatewayPort = siloEndpointConfiguration.GatewayPort; endpointOptions.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, siloEndpointConfiguration.SiloPort); endpointOptions.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, siloEndpointConfiguration.GatewayPort); }); siloBuilder.ConfigureApplicationParts(applicationPartManager => applicationPartManager.AddApplicationPart(typeof(HelloWorld).Assembly).WithReferences()); }) .ConfigureLogging(logging => logging.AddConsole()) .RunConsoleAsync()); }
public static Task Main() { var advertisedIp = Environment.GetEnvironmentVariable("ADVERTISEDIP"); var advertisedIpAddress = advertisedIp == null?GetLocalIpAddress() : IPAddress.Parse(advertisedIp); var extractedGatewayPort = Environment.GetEnvironmentVariable("GATEWAYPORT") ?? throw new Exception("Gateway port cannot be null"); var extractedSiloPort = Environment.GetEnvironmentVariable("SILOPORT") ?? throw new Exception("Silo port cannot be null"); var extractDashboardPort = Environment.GetEnvironmentVariable("DASHBOARDPORT") ?? throw new Exception("Dashboard port cannot be null"); var extractedPrimaryPort = Environment.GetEnvironmentVariable("PRIMARYPORT") ?? throw new Exception("Primary port cannot be null"); var primaryAddress = Environment.GetEnvironmentVariable("PRIMARYADDRESS") ?? throw new Exception("Primary address cannot be null"); var siloPort = int.Parse(extractedSiloPort); var primarySiloPort = int.Parse(extractedPrimaryPort); var gatewayPort = int.Parse(extractedGatewayPort); var dashboardPort = int.Parse(extractDashboardPort); var primaryIp = IPAddress.Parse(primaryAddress); var primarySiloEndpoint = new IPEndPoint(primaryIp, primarySiloPort); var siloEndpointConfiguration = new SiloEndpointConfiguration(advertisedIpAddress, siloPort, gatewayPort); return(new HostBuilder() .UseOrleans(siloBuilder => { siloBuilder.UseLinuxEnvironmentStatistics(); siloBuilder.UseDashboard(dashboardOptions => { dashboardOptions.Username = "******"; dashboardOptions.Password = "******"; dashboardOptions.Port = dashboardPort; }); siloBuilder.UseDevelopmentClustering(primarySiloEndpoint); siloBuilder.Configure <ClusterOptions>(clusterOptions => { clusterOptions.ClusterId = "cluster-of-silos"; clusterOptions.ServiceId = "hello-world-service"; }); siloBuilder.Configure <EndpointOptions>(endpointOptions => { endpointOptions.AdvertisedIPAddress = siloEndpointConfiguration.Ip; endpointOptions.SiloPort = siloEndpointConfiguration.SiloPort; endpointOptions.GatewayPort = siloEndpointConfiguration.GatewayPort; endpointOptions.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, siloEndpointConfiguration.SiloPort); endpointOptions.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, siloEndpointConfiguration.GatewayPort); }); siloBuilder.ConfigureApplicationParts(applicationPartManager => applicationPartManager.AddApplicationPart(typeof(HelloWorld).Assembly).WithReferences()); }) .ConfigureLogging(logging => logging.AddConsole()) .RunConsoleAsync()); }
public static Task Main() { var advertisedIp = Environment.GetEnvironmentVariable("ADVERTISEDIP"); var advertisedIpAddress = advertisedIp == null?GetLocalIpAddress() : IPAddress.Parse(advertisedIp); var extractedGatewayPort = Environment.GetEnvironmentVariable("GATEWAYPORT") ?? throw new Exception("Gateway port cannot be null"); var extractedSiloPort = Environment.GetEnvironmentVariable("SILOPORT") ?? throw new Exception("Silo port cannot be null"); var extractDashboardPort = Environment.GetEnvironmentVariable("DASHBOARDPORT") ?? throw new Exception("Dashboard port cannot be null"); var extractedPrimaryPort = Environment.GetEnvironmentVariable("PRIMARYPORT") ?? throw new Exception("Primary port cannot be null"); var primaryAddress = Environment.GetEnvironmentVariable("PRIMARYADDRESS") ?? throw new Exception("Primary address cannot be null"); var siloPort = int.Parse(extractedSiloPort); var primarySiloPort = int.Parse(extractedPrimaryPort); var gatewayPort = int.Parse(extractedGatewayPort); var dashboardPort = int.Parse(extractDashboardPort); var primaryIp = IPAddress.Parse(primaryAddress); var primarySiloEndpoint = new IPEndPoint(primaryIp, primarySiloPort); var siloEndpointConfiguration = new SiloEndpointConfiguration(advertisedIpAddress, siloPort, gatewayPort); return(new HostBuilder() .UseOrleans(siloBuilder => { siloBuilder.UseLinuxEnvironmentStatistics(); siloBuilder.UseDashboard(dashboardOptions => { dashboardOptions.Username = "******"; dashboardOptions.Password = "******"; dashboardOptions.Port = dashboardPort; }); siloBuilder.UseDevelopmentClustering(primarySiloEndpoint); siloBuilder.Configure <ClusterOptions>(clusterOptions => { clusterOptions.ClusterId = "cluster-of-silos"; clusterOptions.ServiceId = "hello-world-service"; }); siloBuilder.Configure <EndpointOptions>(endpointOptions => { endpointOptions.AdvertisedIPAddress = siloEndpointConfiguration.Ip; endpointOptions.SiloPort = siloEndpointConfiguration.SiloPort; endpointOptions.GatewayPort = siloEndpointConfiguration.GatewayPort; endpointOptions.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, siloEndpointConfiguration.SiloPort); endpointOptions.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, siloEndpointConfiguration.GatewayPort); }); siloBuilder.ConfigureApplicationParts(applicationPartManager => applicationPartManager.AddApplicationPart(typeof(HelloWorld).Assembly).WithReferences()); /*Registering Feature Management, to allow DI of IFeatureManagerSnapshot in HelloWorld grain. * Using built in Percentage filter to demonstrate a feature being on/off.*/ siloBuilder.ConfigureServices(serviceCollection => { serviceCollection.AddFeatureManagement() .AddFeatureFilter <PercentageFilter>(); }); }) .ConfigureLogging(logging => logging.AddConsole()) //Registering a Configuration source for Feature Management. .ConfigureAppConfiguration(config => { config.AddJsonFile("appsettings.json"); }) .RunConsoleAsync()); }