예제 #1
0
        private static async Task <ISiloHost> StartSilo()
        {
            // define the cluster configuration
            var builder = new SiloHostBuilder()
                          .ConfigureClustering(
                ServiceProvider.GetService <IOptions <OrleansConfig> >(),
                Startup.HostingEnvironment.EnvironmentName
                )
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "HelloWorldApp";
            })
                          .AddMemoryGrainStorage(Constants.OrleansMemoryProvider)
                          .ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(typeof(IGrainMarker).Assembly).WithReferences();
            })
                          .ConfigureServices(DependencyInjectionHelper.IocContainerRegistration)
                          .UsePerfCounterEnvironmentStatistics()
                          .UseDashboard(options => { })
                          .UseInMemoryReminderService()
                          .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #2
0
        static ISiloHost CreateSilo(string[] args)
        {
            (int siloPort, int gatewayPort, IPAddress advertisedIP) = GetEndpointsOption(args);
            Console.WriteLine(($"siloPort:{siloPort},gatewayPort:{gatewayPort},advertisedIP:{advertisedIP}"));

            //启动SiloHost
            var builder = new SiloHostBuilder()
                          .UseDashboard(opt => opt.HostSelf = false)
                          .UseConsulClustering((OptionsBuilder <ConsulClusteringSiloOptions> opt) =>
            {
                opt.Configure <IConfiguration>((options, config) =>
                {
                    var c           = config.GetSection("IdentityOptions").Get <ConsulClusteringSiloOptions>();
                    options.Address = c.Address;
                });
            })
                          .ConfigureHostConfiguration((IConfigurationBuilder config) =>
            {
                config.SetBasePath(Directory.GetCurrentDirectory())
                .AddCommandLine(args)
                .AddJsonFile("hostsettings.json", optional: true, reloadOnChange: true);
            })
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "Zop.Identity";
                options.ServiceId = "Zop.Identity";
            })
                          .ConfigureEndpoints(advertisedIP, siloPort: siloPort, gatewayPort: gatewayPort, listenOnAnyHostAddress: true)
                          .ConfigureAppConfiguration((HostBuilderContext context, IConfigurationBuilder config) =>
            {
                config.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true);
            })
                          .ConfigureServices((HostBuilderContext context, IServiceCollection services) =>
            {
                services.AddAutoMapper();
                services.AddIdentityApplication();
                services.AddRepositoryStorage(rb =>
                {
                    var ro = context.Configuration.GetSection("IdentityRepositories").Get <RepositoryOptions>();
                    rb.AddIdentityRepository(options =>
                    {
                        options.DbContextOptions = dbBuilder => dbBuilder.UseMySql(ro.ConnectionString);
                    });
                });
            })
                          .ConfigureLogging((HostBuilderContext context, ILoggingBuilder logging) =>
            {
                logging.AddConfiguration(context.Configuration.GetSection("Logging"));
                logging.AddConsole();
                logging.AddFile(context.Configuration.GetSection("Logging:File"));
            })
                          .Configure <ProcessExitHandlingOptions>(options => options.FastKillOnProcessExit = false)
                          .AddExceptionsFilter();

            var host = builder.Build();

            return(host);
        }
예제 #3
0
        private static async Task <ISiloHost> StartSilo()
        {
            var builder = new SiloHostBuilder()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "HelloWorldApp";
            })
                          .UseAdoNetClustering(options =>
            {
                options.Invariant        = "System.Data.SqlClient";
                options.ConnectionString =
                    "Data Source=researchdb;Initial Catalog=OrleDb;Persist Security Info=True;User ID=sa;Password=OrleDBP@asswor1d";
            })
                          .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
                          .UseDashboard(options => { options.Port = 8090; })
                          .ConfigureLogging(loggingBuilder =>
            {
                loggingBuilder.SetMinimumLevel(LogLevel.Warning).AddFile("log.warn.txt");
                loggingBuilder.SetMinimumLevel(LogLevel.Information).AddFile("log.info.txt");
                loggingBuilder.SetMinimumLevel(LogLevel.Debug).AddFile("log.debug.txt");
            });

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #4
0
        private static async Task <ISiloHost> StartSilo()
        {
            var builder = new SiloHostBuilder()
                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(Account).Assembly).WithReferences())
                          .ConfigureLocalHostPrimarySilo()
                          .ConfigureServices((context, servicecollection) =>
            {
                servicecollection.AddSingleton <ISerializer, ProtobufSerializer>(); //注册序列化组件
                servicecollection.AddMongoES();                                     //注册MongoDB为事件库
                servicecollection.AddRabbitMQ <MessageInfo>();                      //注册RabbitMq为默认消息队列
            })
                          .Configure <MongoConfig>(c =>
            {
                c.SysStartTime = new DateTime(2018, 2, 1);
                c.Connection   = "mongodb://127.0.0.1:28888";
            })
                          .Configure <RabbitConfig>(c =>
            {
                c.UserName    = "******";
                c.Password    = "******";
                c.Hosts       = new[] { "192.168.199.216:5672" };
                c.MaxPoolSize = 100;
                c.VirtualHost = "/";
            })
                          .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #5
0
 protected Task RunSilo()
 {
     try
     {
         var builder = new SiloHostBuilder();
         builder.Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
         .UseLocalhostClustering()
         .Configure <ClusterOptions>(options =>
         {
             options.ClusterId = TableRoom.GameConstant.ClusterId;
             options.ServiceId = TableRoom.GameConstant.ServiceId;
         })
         .Configure <GrainCollectionOptions>(options =>
         {
             options.CollectionAge       = TimeSpan.FromSeconds(61);
             options.DeactivationTimeout = TimeSpan.FromSeconds(5);
             options.CollectionQuantum   = TimeSpan.FromSeconds(1);
         })
         .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Error).AddConsole());//LogLevel.Warning
         builder.ConfigureApplicationParts(parts =>
         {
             parts.AddApplicationPart(typeof(GChatRoomEntry).Assembly).WithReferences();
         });
         m_Host = builder.Build();
         m_Host.StartAsync().Wait();
     }
     catch (Exception e)
     {
         Log.Debug(e.ToString());
     }
     return(Task.CompletedTask);
 }
예제 #6
0
파일: Program.cs 프로젝트: toby2o12/Ray
        private static async Task <ISiloHost> StartSilo()
        {
            var config = ClusterConfiguration.LocalhostPrimarySilo();

            config.AddMemoryStorageProvider();
            var builder = new SiloHostBuilder()
                          .UseConfiguration(config)
                          .AddApplicationPartsFromReferences(typeof(Account).Assembly)
                          .ConfigureServices((context, servicecollection) =>
            {
                servicecollection.AddSingleton <ISerializer, ProtobufSerializer>(); //注册序列化组件
                servicecollection.AddMongoES();                                     //注册MongoDB为事件库
                servicecollection.AddRabbitMQ <MessageInfo>();                      //注册RabbitMq为默认消息队列
            })
                          .Configure <MongoConfig>(c => c.Connection = "mongodb://127.0.0.1:28888")
                          .Configure <RabbitConfig>(c =>
            {
                c.UserName    = "******";
                c.Password    = "******";
                c.Hosts       = new[] { "127.0.0.1:5672" };
                c.MaxPoolSize = 100;
                c.VirtualHost = "/";
            })
                          .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #7
0
        static void Main(string[] args)
        {
            var builder = new SiloHostBuilder()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = Constants.ClusterId;
                options.ServiceId = Constants.ServiceId;
            })
                          .UseLocalhostClustering()
                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(Channel).Assembly).WithReferences())
                          .ConfigureLogging(logging => logging.AddConsole())
                          //need to configure a grain storage called "PubSubStore" for using streaming with ExplicitSubscribe pubsub type
                          .AddMemoryGrainStorage("PubSubStore")
                          //Depends on your application requirements, you can configure your silo with other stream providers, which can provide other features,
                          //such as persistence or recoverability. For more information, please see http://dotnet.github.io/orleans/Documentation/Orleans-Streams/Stream-Providers.html
                          .AddSimpleMessageStreamProvider(Constants.ChatRoomStreamProvider);


            var silo = builder.Build();

            silo.StartAsync().Wait();

            Console.WriteLine("Press Enter to close.");
            Console.ReadLine();

            // shut the silo down after we are done.
            silo.StopAsync().Wait();
        }
예제 #8
0
        public static async Task <IWebHostBuilder> CreateWebHostBuilder(string[] args)
        {
            var silo =
                new SiloHostBuilder()
                .UseDashboard()
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("OrleansStorage")     // TODO: replace with your storage
                .ConfigureApplicationParts(parts =>
            {
                parts.AddApplicationPart(typeof(ISimple).Assembly).WithReferences();
                parts.AddApplicationPart(typeof(SimpleGrain).Assembly).WithReferences();
            })
                .Build();

            await silo.StartAsync();

            var client = silo.Services.GetRequiredService <IClusterClient>();

            return(WebHost.CreateDefaultBuilder(args)
                   .ConfigureServices(s =>
            {
                s.AddSingleton <IClusterClient>(client);
                s.AddSingleton <IGrainFactory>(client);
            })
                   .UseStartup <Startup>());
        }
예제 #9
0
        private static async Task <ISiloHost> StartSilo()
        {
            var assambly = typeof(IHelloGrain).Assembly;
            var builder  = new SiloHostBuilder()
                           .UseLocalhostClustering()
                           .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "TestApp";
            })
                           .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                           .ConfigureApplicationParts(parts => parts.AddApplicationPart(assambly).WithReferences())
                           .ConfigureLogging(logging => logging.AddConsole())
                           .UseInMemoryReminderService()
                           .UseLocalhostClustering()
                           .AddLogStorageBasedLogConsistencyProvider("LogStorage")
                           .AddStateStorageBasedLogConsistencyProvider("StateStorage")
                           //.AddCustomStorageBasedLogConsistencyProvider("CustomStorage")
                           .AddMemoryGrainStorage("OrleansStorage", options => options.NumStorageGrains = 10);


            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #10
0
        /// <summary>
        /// 在本地启动一个Host
        /// </summary>
        /// <returns></returns>
        static async Task <ISiloHost> StartHost(int silePort, int gatewayPort, int mainSiloPort)
        {
            var builder = new SiloHostBuilder()
                          //启动一个在本地的Host 若primarySiloEndpoint属性为空 则启动主简仓 否则进行连接
                          //IPAddress.Loopback为127.0.0.1
                          .UseDevelopmentClustering(new IPEndPoint(IPAddress.Loopback, mainSiloPort))
                          .ConfigureEndpoints(siloPort: silePort, gatewayPort: gatewayPort)
                          .Configure <ClusterOptions>(options =>
            {
                //ClusterId为集群名称 相同的名称才能被分配到一个集群中
                options.ClusterId = "dev";
                //当前服务的名称
                options.ServiceId = "ShoppingRecordServer";
            })
                          //注入打印消息的入口
                          .ConfigureLogging(logging => logging.AddConsole());

            //进行构建
            var host = builder.Build();
            //启动服务
            await host.StartAsync();

            Console.WriteLine("服务启动成功");
            return(host);
        }
예제 #11
0
        /// <summary>
        /// 启动网关的简仓
        /// </summary>
        /// <returns></returns>
        static async Task <ISiloHost> StartHost(int silePort, int gatewayPort)
        {
            var builder = new SiloHostBuilder()
                          .Configure <SerializationProviderOptions>(d => { d.SerializationProviders.Add(typeof(ProtobufSerializer).GetTypeInfo()); d.FallbackSerializationProvider = typeof(ProtobufSerializer).GetTypeInfo(); })
                          .UseDevelopmentClustering(new IPEndPoint(IPAddress.Loopback, silePort))
                          .ConfigureEndpoints(GetInternalIp(), siloPort: silePort, gatewayPort: gatewayPort)

                          .Configure <ClusterOptions>(options =>
            {
                //ClusterId为集群名称 相同的名称才能被分配到一个集群中
                options.ClusterId = "dev";
                //当前服务的名称
                options.ServiceId = "GoodsServer";
            })
                          //注入打印消息的入口
                          .ConfigureLogging(logging => logging.AddConsole());

            //进行构建
            var host = builder.Build();
            //启动服务
            await host.StartAsync();

            Console.WriteLine("简仓服务启动成功");
            return(host);
        }
        public void StorageOptionsValidator(string connectionString)
        {
            var siloPort    = 11111;
            int gatewayPort = 30000;
            var siloAddress = IPAddress.Loopback;

            var builder = new SiloHostBuilder();

            Assert.Throws <OrleansConfigurationException>(() =>
            {
                var silo = builder
                           .Configure <ClusterOptions>(options => options.ClusterId         = "TESTCLUSTER")
                           .UseDevelopmentClustering(options => options.PrimarySiloEndpoint = new IPEndPoint(siloAddress, siloPort))
                           .ConfigureEndpoints(siloAddress, siloPort, gatewayPort)
                           .ConfigureApplicationParts(pm =>
                {
                    pm.AddApplicationPart(typeof(JsonTestGrain).Assembly);
                    pm.AddApplicationPart(typeof(IJsonTestGrain).Assembly);
                })
                           .AddRedisGrainStorage("Redis", optionsBuilder => optionsBuilder.Configure(options =>
                {
                    options.DataConnectionString = connectionString;
                }))
                           .Build();
            });
        }
예제 #13
0
        private static async Task <ISiloHost> StartSilo()
        {
            var builder = new SiloHostBuilder()

                          // configurando acesso ao silo
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "dev";
            })
                          .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)

                          // clustering organizado via banco de dados
                          .UseAdoNetClustering(options =>
            {
                options.Invariant        = "System.Data.SqlClient";
                options.ConnectionString = "Server=localhost;Database=Example;User Id=sa;Password=root@1234";
            })


                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(NormalGrain).Assembly).WithReferences())
                          .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #14
0
        private static async Task <ISiloHost> StartSilo()
        {
            //define the cluster config
            var builder = new SiloHostBuilder()
                          .AddAdoNetGrainStorage("SqlStorage", options =>
            {
                options.Invariant        = "System.Data.SqlClient";
                options.ConnectionString = "Server=localhost;Database=OrleansStorageTest;User=sa;Password=1q2w3e4r*;";
                options.UseJsonFormat    = true;
            })
                          .UseLocalhostClustering()
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "OrleansTutorialOne";
            })
                          .ConfigureApplicationParts(parts =>
                                                     parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
                          .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #15
0
        public void SiloHostBuilder_ClusterOptionsTest()
        {
            Assert.Throws <OrleansConfigurationException>(() => new SiloHostBuilder()
                                                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                                                          .ConfigureServices(services => services.AddSingleton <IMembershipTable, NoOpMembershipTable>())
                                                          .Build());

            Assert.Throws <OrleansConfigurationException>(() => new SiloHostBuilder()
                                                          .Configure <ClusterOptions>(options => options.ClusterId            = "someClusterId")
                                                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                                                          .ConfigureServices(services => services.AddSingleton <IMembershipTable, NoOpMembershipTable>())
                                                          .Build());

            Assert.Throws <OrleansConfigurationException>(() => new SiloHostBuilder()
                                                          .Configure <ClusterOptions>(options => options.ServiceId            = "someServiceId")
                                                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                                                          .ConfigureServices(services => services.AddSingleton <IMembershipTable, NoOpMembershipTable>())
                                                          .Build());

            var builder = new SiloHostBuilder()
                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                          .Configure <ClusterOptions>(options => { options.ClusterId = "someClusterId"; options.ServiceId = "someServiceId"; })
                          .ConfigureServices(services => services.AddSingleton <IMembershipTable, NoOpMembershipTable>());

            using (var silo = builder.Build())
            {
                Assert.NotNull(silo);
            }
        }
        /// <inheritdoc />
        public async Task <string> OpenAsync(CancellationToken cancellationToken)
        {
            try
            {
                var builder = new SiloHostBuilder();
                builder.ConfigureServices(
                    services =>
                {
                    services.AddOptions <FabricSiloInfo>().Configure <ILocalSiloDetails>((info, details) =>
                    {
                        info.Name = details.Name;
                        info.Silo = details.SiloAddress.ToParsableString();
                        if (details.GatewayAddress != null)
                        {
                            info.Gateway = details.GatewayAddress.ToParsableString();
                        }
                    });
                });
                this.configure(builder);

                this.Host = builder.Build();
                await this.Host.StartAsync(cancellationToken);
            }
            catch
            {
                this.Abort();
                throw;
            }

            var endpoint = this.Host.Services.GetRequiredService <IOptions <FabricSiloInfo> >().Value;

            return(JsonConvert.SerializeObject(endpoint));
        }
예제 #17
0
        public void SiloHostBuilder_LoadSheddingValidatorPasses()
        {
            var builder = new SiloHostBuilder()
                          .ConfigureDefaults()
                          .UseLocalhostClustering()
                          .Configure <ClusterOptions>(options => options.ClusterId            = "someClusterId")
                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                          .ConfigureServices(services => services.AddSingleton <IMembershipTable, NoOpMembershipTable>())
                          .Configure <LoadSheddingOptions>(options =>
            {
                options.LoadSheddingEnabled = true;
                options.LoadSheddingLimit   = 95;
            })
                          .ConfigureServices(svcCollection =>
            {
                svcCollection.AddSingleton <FakeHostEnvironmentStatistics>();
                svcCollection.AddFromExisting <IHostEnvironmentStatistics, FakeHostEnvironmentStatistics>();
                svcCollection.AddTransient <IConfigurationValidator, LoadSheddingValidator>();
            });

            using (var host = builder.Build())
            {
                Assert.NotNull(host);
            }
        }
예제 #18
0
        private static async Task <ISiloHost> InitialiseSilo()
        {
            var builder = new SiloHostBuilder()
                          // Grain State
                          .AddAdoNetGrainStorage("PubSubStore", options =>
            {
                options.Invariant        = Invariant;
                options.ConnectionString = ConnectionString;
                options.UseJsonFormat    = true;
            })
                          // Membership
                          .UseAdoNetClustering(options =>
            {
                options.Invariant        = Invariant;
                options.ConnectionString = ConnectionString;
            })
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = ClusterId;
                options.ServiceId = ServiceId;
            })
                          .AddSimpleMessageStreamProvider("SMSProvider")
                          .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(PublisherGrain).Assembly).WithReferences())
                          .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Warning).AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
        private async Task RunAsync(CancellationToken cancellationToken)
        {
            // TODO: Replace the following with your own logic.
            var siloPort    = 11111;
            int gatewayPort = 30000;
            var siloAddress = IPAddress.Loopback;

            var silo =
                new SiloHostBuilder()
                .UseDashboard(options =>
            {
                options.HostSelf  = true;
                options.HideTrace = false;
            })
                .UseDevelopmentClustering(options => options.PrimarySiloEndpoint = new IPEndPoint(siloAddress, siloPort))
                .UseInMemoryReminderService()
                .ConfigureEndpoints(siloAddress, siloPort, gatewayPort)
                .Configure <ClusterOptions>(options => options.ClusterId = "helloworldcluster")
                .ConfigureApplicationParts(appParts => appParts.AddApplicationPart(typeof(TestCalls).Assembly))
                .Build();

            await silo.StartAsync();

            while (!cancellationToken.IsCancellationRequested)
            {
                await Task.Delay(1000);
            }

            await silo.StopAsync();
        }
예제 #20
0
파일: Program.cs 프로젝트: chi8708/Ray
        private static async Task <ISiloHost> StartSilo()
        {
            var builder = new SiloHostBuilder()
                          .UseLocalhostClustering()
                          .UseDashboard()
                          .AddRay <Configuration>()
                          .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(Account).Assembly).WithReferences())
                          .ConfigureServices((context, servicecollection) =>
            {
                //注册postgresql为事件存储库
                servicecollection.AddPostgreSQLStorage(config =>
                {
                    config.ConnectionDict.Add("core_event", "Server=127.0.0.1;Port=5432;Database=Ray;User Id=postgres;Password=extop;Pooling=true;MaxPoolSize=20;");
                });
                servicecollection.AddPostgreSQLTransactionStorage(options =>
                {
                    options.ConnectionKey = "core_event";
                    options.TableName     = "Transaction_TemporaryRecord";
                });
                servicecollection.PSQLConfigure();
                //注册mongodb为事件存储库
                //servicecollection.AddMongoDBStorage(config =>
                //{
                //    config.ConnectionDict.Add("core", "mongodb://127.0.0.1:27017");
                //});
                //servicecollection.AddMongoTransactionStorage(options =>
                //{
                //    options.ConnectionKey = "core";
                //    options.CollectionName = "Transaction_TemporaryRecord";
                //});
                //servicecollection.MongoConfigure();
                servicecollection.AddRabbitMQ(config =>
                {
                    config.UserName    = "******";
                    config.Password    = "******";
                    config.Hosts       = new[] { "127.0.0.1:5672" };
                    config.MaxPoolSize = 100;
                    config.VirtualHost = "/";
                }, async container =>
                {
                    await container.CreateEventBus <Account>("Account", "account", 5).DefaultConsumer <long>();
                });
            })
                          .Configure <GrainCollectionOptions>(options =>
            {
                options.CollectionAge = TimeSpan.FromMinutes(5);
            })
                          .ConfigureLogging(logging =>
            {
                logging.SetMinimumLevel(LogLevel.Information);
                logging.AddConsole(options => options.IncludeScopes = true);
            }).EnableDirectClient();

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
예제 #21
0
        private static async Task <ISiloHost> StartSilo()
        {
            var config        = LoadConfig();
            var orleansConfig = GetOrleansConfig(config);

            var builder = new SiloHostBuilder()
                          //Clustering information
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "HelloApp";
            })
                          //Clustering provider
                          .UseAdoNetClustering(options => {
                options.Invariant        = orleansConfig.Invariant;
                options.ConnectionString = orleansConfig.ConnectionString;
            })
                          //Endpoints
                          .Configure <EndpointOptions>(options =>
            {
                options.SiloPort            = 11112;
                options.GatewayPort         = 30002;
                options.AdvertisedIPAddress = IPAddress.Loopback;
            })
                          .UseDashboard()
                          .ConfigureServices(services =>
            {
                services.AddSingleton <IOrleansRequestContext, OrleansRequestContext>();
                services.AddSingleton(s => CreateGrainMethodsList());
                services.AddSingleton(s => new JsonSerializerSettings
                {
                    NullValueHandling          = NullValueHandling.Ignore,
                    Formatting                 = Formatting.None,
                    TypeNameHandling           = TypeNameHandling.None,
                    ReferenceLoopHandling      = ReferenceLoopHandling.Serialize,
                    PreserveReferencesHandling = PreserveReferencesHandling.Objects
                });
            })

                          .AddStateStorageBasedLogConsistencyProvider("StateStorage")


                          .AddIncomingGrainCallFilter <LoggingFilter>()
                          .AddAdoNetGrainStorageAsDefault(options =>
            {
                options.Invariant        = orleansConfig.Invariant;
                options.ConnectionString = orleansConfig.ConnectionString;
                options.UseJsonFormat    = true;
            })
                          //Implementations
                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IHello).Assembly).WithReferences())
                          .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
                          .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();

            return(host);
        }
        /// <summary>
        /// 启动Orleans仪表盘服务
        /// </summary>
        /// <param name="configure"></param>
        /// <param name="applicationPartTypes"></param>
        /// <returns></returns>
        public static ISiloHost StartDashboardServer(DashboardConfiguration configure, Type[] applicationPartTypes)
        {
            var gatewayPort = configure.GatewayPort;
            var siloPort    = configure.SiloPort;

            var builder = new SiloHostBuilder()
                          // Grain State
                          .AddAdoNetGrainStorage(configure.OrleansStorage, options =>
            {
                options.Invariant        = Invariant;
                options.ConnectionString = configure.ClusterDatabase.ConnectionString;
                options.UseJsonFormat    = true;
            })
                          // Membership
                          .UseAdoNetClustering(options =>
            {
                options.Invariant        = Invariant;
                options.ConnectionString = configure.ClusterDatabase.ConnectionString;
            })
                          .UseDashboard(options =>
            {
                options.Username  = configure.Username;
                options.Password  = configure.Password;
                options.HostSelf  = true;
                options.HideTrace = false;
                options.Port      = configure.Port;
                options.CounterUpdateIntervalMs = configure.UpdateIntervalMs;
            })
                          .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = configure.ClusterId;
                options.ServiceId = configure.ServiceId;
            })
                          .Configure <SerializationProviderOptions>(options =>
            {
                options.SerializationProviders.Add(typeof(ProtobufSerializer).GetTypeInfo());
                options.FallbackSerializationProvider = typeof(ProtobufSerializer).GetTypeInfo();
            })
                          .ConfigureEndpoints(siloPort, gatewayPort)
                          .ConfigureApplicationParts(parts =>
            {
                if (applicationPartTypes != null)
                {
                    foreach (var type in applicationPartTypes)
                    {
                        parts.AddApplicationPart(type.Assembly).WithReferences();
                    }
                }
            })
                          .UseInMemoryReminderService()
                          .ConfigureLogging(log => log.SetMinimumLevel(LogLevel.Warning).AddConsole());

            var host = builder.Build();

            host.StartAsync().Wait();

            Console.WriteLine("Orleans仪表盘已经启动");
            return(host);
        }
예제 #23
0
 public ISiloHostBuilder CreateSiloBuilder(string siloName, ClusterConfiguration clusterConfiguration)
 {
     return(SiloHostBuilder
            .CreateDefault()
            .UseConfiguration(clusterConfiguration)
            .ConfigureSiloName(siloName)
            .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IRuntimeCodeGenGrain).Assembly).WithCodeGeneration()));
 }
예제 #24
0
        public ExceptionTests()
        {
            this.silo = SiloHostBuilder.CreateDefault().ConfigureApplicationParts(parts => parts.AddFromAppDomain()).ConfigureLocalHostPrimarySilo().Build();
            this.silo.StartAsync().GetAwaiter().GetResult();

            this.client = ClientBuilder.CreateDefault().ConfigureApplicationParts(parts => parts.AddFromAppDomain()).UseConfiguration(ClientConfiguration.LocalhostSilo()).Build();
            this.client.Connect().GetAwaiter().GetResult();
        }
예제 #25
0
        public void SiloHostBuilder_NullConfigurationTest()
        {
            var builder = SiloHostBuilder.CreateDefault()
                          .ConfigureApplicationParts(parts => parts.AddFromApplicationBaseDirectory().AddFromAppDomain())
                          .ConfigureServices(RemoveConfigValidators);

            Assert.Throws <ArgumentNullException>(() => builder.UseConfiguration(null));
        }
예제 #26
0
        public void SiloHostBuilder_DoubleSpecifyConfigurationTest()
        {
            var builder = SiloHostBuilder.CreateDefault()
                          .ConfigureApplicationParts(parts => parts.AddFromApplicationBaseDirectory().AddFromAppDomain())
                          .ConfigureServices(RemoveConfigValidators).UseConfiguration(new ClusterConfiguration()).UseConfiguration(new ClusterConfiguration());

            Assert.Throws <InvalidOperationException>(() => builder.Build());
        }
예제 #27
0
        private static async Task <ISiloHost> StartSilo()
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                         .Build();

            var invariant        = "System.Data.SqlClient";
            var connectionString = config.GetConnectionString("DefaultConnectionString");

            var assambly = typeof(Program).Assembly;
            var builder  = new SiloHostBuilder()
                           .UseLocalhostClustering()
                           .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "SettlementClusterID";
                options.ServiceId = "settlementServiceID";
            })
                           .Configure <EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                           .ConfigureApplicationParts(parts => parts.AddApplicationPart(assambly).WithReferences())
                           .ConfigureLogging(logging => logging.AddConsole())
                           .ConfigureAppConfiguration(context =>
            {
                context.AddConfiguration(config);
            })
                           .UseInMemoryReminderService()
                           //依赖注入
                           .UseServiceProviderFactory(opt =>
            {
                opt.AddTransient <ISettlementRepository, SettlementRepository>();
                return(opt.BuildServiceProvider());
            })
                           //use AdoNet for clustering
                           .UseAdoNetClustering(options =>
            {
                options.Invariant        = invariant;
                options.ConnectionString = connectionString;
            })
                           //use AdoNet for reminder service
                           .UseAdoNetReminderService(options =>
            {
                options.Invariant        = invariant;
                options.ConnectionString = connectionString;
            })
                           //use AdoNet for Persistence
                           .AddAdoNetGrainStorage("SettlementStore", options =>
            {
                options.Invariant        = invariant;
                options.ConnectionString = connectionString;
            });


            var host = builder.Build();

            await host.StartAsync();

            return(host);
        }
예제 #28
0
        public static void Main(string[] args)
        {
            var siloPort    = 11111;
            int gatewayPort = 30000;
            var siloAddress = IPAddress.Loopback;

            var silo =
                new SiloHostBuilder()
                .UseDashboard(options =>
            {
                options.HostSelf  = true;
                options.HideTrace = false;
            })
                .UseDevelopmentClustering(options => options.PrimarySiloEndpoint = new IPEndPoint(siloAddress, siloPort))
                .UseInMemoryReminderService()
                .ConfigureEndpoints(siloAddress, siloPort, gatewayPort)
                .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "helloworldcluster";
                options.ServiceId = "1";
            })
                .ConfigureApplicationParts(appParts => appParts.AddApplicationPart(typeof(TestCalls).Assembly))
                .ConfigureLogging(builder =>
            {
                builder.AddConsole();
            })
                .Build();

            silo.StartAsync().Wait();

            var client =
                new ClientBuilder()
                .UseStaticClustering(options => options.Gateways.Add((new IPEndPoint(siloAddress, gatewayPort)).ToGatewayUri()))
                .Configure <ClusterOptions>(options =>
            {
                options.ClusterId = "helloworldcluster";
                options.ServiceId = "1";
            })
                .ConfigureApplicationParts(appParts => appParts.AddApplicationPart(typeof(TestCalls).Assembly))
                .ConfigureLogging(builder =>
            {
                builder.AddConsole();
            })
                .Build();

            client.Connect().Wait();

            var cts = new CancellationTokenSource();

            TestCalls.Make(client, cts);

            Console.WriteLine("Press key to exit...");
            Console.ReadLine();

            cts.Cancel();

            silo.StopAsync().Wait();
        }
예제 #29
0
파일: Program.cs 프로젝트: lulzzz/scynet
        private static async Task <int> RunMainAsync(string[] args)
        {
            try
            {
                Console.WriteLine("Configuring local silo...");

                Channel channel = new Channel("127.0.0.1:9998", ChannelCredentials.Insecure); // TODO: Make the ip configurable.



                var builder = new SiloHostBuilder()
                              .UseLocalhostClustering()
                              .Configure <ClusterOptions>(options =>
                {
                    options.ClusterId = "dev";
                    options.ServiceId = "EthereumBlockChainHarvester";
                })
                              .ConfigureApplicationParts(parts => parts
                                                         .AddApplicationPart(typeof(BlockChainExtractor).Assembly)
                                                         .WithReferences()) //TODO: Load the assembly in some other way so we are not dependent on the implementation project.
                              .ConfigureLogging(logging => logging.AddConsole())
                              .ConfigureServices(((context, services) => {
                    services.AddSingleton <Channel>(sc => channel);
                    // TODO: Find if these will work without a factory.

                    services.AddSingleton <Scynet.Subscriber.SubscriberClient>(sc => new Scynet.Subscriber.SubscriberClient(channel));
                    services.AddSingleton <Scynet.Publisher.PublisherClient>(sc => new Scynet.Publisher.PublisherClient(channel));
                    services.AddSingleton <Scynet.Hatchery.HatcheryClient>(sc => new Scynet.Hatchery.HatcheryClient(channel));
                }))
                              .AddSimpleMessageStreamProvider("SMSProvider")
                              .AddMemoryGrainStorageAsDefault()
                              .AddMemoryGrainStorage("PubSubStore");



                var host = builder.Build();


                Console.WriteLine("Running...");

                await host.StartAsync();



                Console.WriteLine("Yay, everything worked!");
                Console.WriteLine("\nPress Enter to terminate...\n");
                Console.ReadLine();

                await host.StopAsync();

                return(0);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return(1);
            }
        }
예제 #30
0
        public void SiloHostBuilder_DoubleSpecifyConfigurationTest()
        {
            var builder = new SiloHostBuilder().ConfigureDefaults()
                          .ConfigureServices(RemoveConfigValidatorsAndSetAddress)
                          .UseConfiguration(new ClusterConfiguration())
                          .UseConfiguration(new ClusterConfiguration());

            Assert.Throws <InvalidOperationException>(() => builder.Build());
        }