示例#1
0
        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());
        }
示例#2
0
        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());
        }
示例#3
0
        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());
        }