public LongRunningStatusHub(ILogger <LongRunningStatusHub> logger,
                             IOptionsMonitor <ClusterInfoOption> clusterInfoOptionsMonitor, IOptionsMonitor <OrleansProviderOption> providerOptionsMonitor)
 {
     _logger         = logger;
     _clusterInfo    = clusterInfoOptionsMonitor.CurrentValue;
     _providerOption = providerOptionsMonitor.CurrentValue;
 }
示例#2
0
 public LongTaskDemoController(ILogger <LongTaskDemoController> logger,
                               IOptionsMonitor <ClusterInfoOption> clusterInfoOptionsMonitor, IOptionsMonitor <OrleansProviderOption> providerOptionsMonitor)
 {
     _logger         = logger;
     _clusterInfo    = clusterInfoOptionsMonitor.CurrentValue;
     _providerOption = providerOptionsMonitor.CurrentValue;
 }
示例#3
0
        /// <summary>
        /// Initialize Static Route ClientBuilder
        /// </summary>
        /// <param name="clusterInfo"></param>
        /// <param name="staticGatewayOption"></param>
        /// <param name="applicationPartTypes">Application parts (optional)</param>
        /// <returns></returns>
        public static IClientBuilder CreateStaticRouteClientBuilder(
            ClusterInfoOption clusterInfo,
            StaticGatewayListProviderOptions staticGatewayOption,
            IEnumerable <Type> applicationPartTypes = null)
        {
            var clientBuilder = new ClientBuilder()
                                .ConfigureCluster(clusterInfo, TimeSpan.FromSeconds(20), TimeSpan.FromMinutes(60))
                                .Configure <StatisticsOptions>(options =>
            {
                options.CollectionLevel = StatisticsLevel.Critical;
            })
                                .UseStaticClustering(option =>
            {
                option.Gateways = staticGatewayOption.Gateways;
            });

            if (applicationPartTypes != null)
            {
                clientBuilder.ConfigureApplicationParts(manager =>
                {
                    foreach (var applicationPartType in applicationPartTypes)
                    {
                        manager.AddApplicationPart(applicationPartType.Assembly).WithReferences();
                    }
                });
            }

            return(clientBuilder);
        }
        public async Task DemoRun()
        {
            var clusterInfoOption = new ClusterInfoOption {
                ClusterId = "dev", ServiceId = "HelloWorldApp"
            };
            var staticGatewayOption = new StaticGatewayListProviderOptions
            {
                Gateways = new List <Uri> {
                    new Uri("gwy.tcp://127.0.0.1:30000/0")
                }
            };

            using var client =
                      OrleansClientBuilder.CreateStaticRouteClient(_logger,
                                                                   clusterInfoOption, staticGatewayOption,
                                                                   configureLogging: builder => { builder.AddSerilog(); });

            await client.ConnectWithRetryAsync();

            _logger.LogInformation("Client successfully connect to silo host");

            var grain = client.GetGrain <IHello>(0);

            _logger.LogInformation("Get hello world grain, start calling RPC methods...");

            var returnValue = await grain.SayHello("Hello Orleans");

            _logger.LogInformation($"RPC method return value is \r\n\r\n{{{returnValue}}}\r\n");

            await client.Close();

            _logger.LogInformation("Client successfully close connection to silo host");
        }
 public PlayerClientHub(
     IOptionsMonitor <ClusterInfoOption> clusterInfoOptions,
     IOptionsMonitor <OrleansProviderOption> providerOptions,
     ILogger <PlayerClientHub> logger)
 {
     _clusterInfo  = clusterInfoOptions.CurrentValue;
     _providerInfo = providerOptions.CurrentValue;
     _logger       = logger;
 }
示例#6
0
        private static ClientBuilder ConfigureCluster(this ClientBuilder clientBuilder,
                                                      ClusterInfoOption clusterInfo, TimeSpan responseTimeout, TimeSpan responseTimeoutWithDebugger)
        {
            clientBuilder.Configure <ClientMessagingOptions>(options =>
            {
                options.ResponseTimeout             = responseTimeout;
                options.ResponseTimeoutWithDebugger = responseTimeoutWithDebugger;
            }).Configure <ClusterOptions>(options =>
            {
                options.ClusterId = clusterInfo.ClusterId;
                options.ServiceId = clusterInfo.ServiceId;
            });

            return(clientBuilder);
        }
        public async Task DemoRun()
        {
            var clusterInfoOption = new ClusterInfoOption {
                ClusterId = "dev", ServiceId = "HelloWorldApp"
            };

            var sqlDbProviderOption =
                new OrleansProviderOption
            {
                DefaultProvider = @"SQLDB",
                SQLDB           = new AdoNetProviderSettings
                {
                    Cluster = new AdoNetProviderClusterSettings
                    {
                        DbConn =
                            @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Orleans_Cluster;
                                Integrated Security=True;Pooling=False;Max Pool Size=200;
                                MultipleActiveResultSets=True"
                    }
                }
            };

            using var client =
                      OrleansClientBuilder.CreateClient(_logger,
                                                        clusterInfoOption, sqlDbProviderOption,
                                                        configureLogging: builder => { builder.AddSerilog(); });

            await client.ConnectWithRetryAsync();

            _logger.LogInformation("Client successfully connect to silo host");

            var grain = client.GetGrain <IHello>(0);

            _logger.LogInformation("Get hello world grain, start calling RPC methods...");

            var returnValue = await grain.SayHello("Hello Orleans");

            _logger.LogInformation($"RPC method return value is \r\n\r\n{{{returnValue}}}\r\n");

            await client.Close();

            _logger.LogInformation("Client successfully close connection to silo host");
        }
示例#8
0
        private static (ClusterInfoOption, OrleansProviderOption) GetConfigSettings(string[] args)
        {
            var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json")
                          .AddEnvironmentVariables(prefix: "ORLEANS_CLIENT_APP_")
                          .AddCommandLine(args);

            var config = builder.Build().GetSection("Orleans");

            var clusterInfo = new ClusterInfoOption();

            config.GetSection("Cluster").Bind(clusterInfo);

            var providerInfo = new OrleansProviderOption();

            config.GetSection("Provider").Bind(providerInfo);

            return(clusterInfo, providerInfo);
        }
        public async Task DemoRun()
        {
            var clusterInfoOption = new ClusterInfoOption {
                ClusterId = "dev", ServiceId = "HelloWorldApp"
            };

            var sqlDbProviderOption =
                new OrleansProviderOption
            {
                DefaultProvider = @"MYSQL",
                SQLDB           = new AdoNetProviderSettings
                {
                    Cluster = new AdoNetProviderClusterSettings
                    {
                        DbConn =
                            @"Server=localhost;uid=root;pwd=Pass1234;Database=orleans_demo"
                    }
                }
            };

            using var client =
                      OrleansClientBuilder
                      .CreateClient(_logger, clusterInfoOption, sqlDbProviderOption,
                                    new[] { typeof(IHello) }, configureLogging: builder => {
                builder.AddSerilog();
            });
            await client.ConnectWithRetryAsync();

            _logger.LogInformation("Client successfully connect to silo host");

            var grain = client.GetGrain <IHello>(0);

            _logger.LogInformation("Get hello world grain, start calling RPC methods...");

            var returnValue = await grain.SayHello("Hello Orleans");

            _logger.LogInformation($"RPC method return value is \r\n\r\n{{{returnValue}}}\r\n");

            await client.Close();

            _logger.LogInformation("Client successfully close connection to silo host");
        }
示例#10
0
 /// <summary>
 /// Create Orleans Client using various configuration options
 /// </summary>
 /// <param name="logger">Logger to log ClientBuilder operation information</param>
 /// <param name="clusterInfo"></param>
 /// <param name="providerOption"></param>
 /// <param name="applicationPartTypes">Application parts (optional)</param>
 /// <param name="configureLogging"></param>
 /// <returns></returns>
 public static IClusterClient CreateClient(ILogger logger,
                                           ClusterInfoOption clusterInfo,
                                           OrleansProviderOption providerOption,
                                           IEnumerable <Type> applicationPartTypes   = null,
                                           Action <ILoggingBuilder> configureLogging = null)
 {
     try
     {
         var builder = CreateClientBuilder(logger, clusterInfo, providerOption, applicationPartTypes);
         if (configureLogging != null)
         {
             builder.ConfigureLogging(configureLogging);
         }
         return(builder.Build());
     }
     catch (Exception ex)
     {
         logger.LogError(ex, "Create Silo Client failed");
         throw;
     }
 }
示例#11
0
        public async Task DemoRun()
        {
            var clusterInfoOption = new ClusterInfoOption {
                ClusterId = "dev", ServiceId = "HelloWorldApp"
            };

            var mongoDbProviderOption = new OrleansProviderOption
            {
                DefaultProvider = "mongodb",
                MongoDB         = new MongoDbProviderSettings
                {
                    Cluster = new MongoDbProviderClusterSettings
                    {
                        DbConn = "mongodb://localhost:27017",
                        DbName = "demo-silo-Clustering"
                    }
                }
            };

            using var client = OrleansClientBuilder
                               .CreateClient(_logger, clusterInfoOption, mongoDbProviderOption, new[] { typeof(IHello) },
                                             builder => { builder.AddSerilog(); });

            await client.ConnectWithRetryAsync();

            _logger.LogInformation("Client successfully connect to silo host");

            var grain = client.GetGrain <IHello>(0);

            _logger.LogInformation("Get hello world grain, start calling RPC methods...");

            var returnValue = await grain.SayHello("Hello Orleans");

            _logger.LogInformation($"RPC method return value is \r\n\r\n{{{returnValue}}}\r\n");

            await client.Close();

            _logger.LogInformation("Client successfully close connection to silo host");
        }
示例#12
0
        /// <summary>
        /// Initialize a normal Orleans ClientBuilder
        /// </summary>
        /// <param name="logger">Logger to log ClientBuilder operation information</param>
        /// <param name="clusterInfo"></param>
        /// <param name="providerOption"></param>
        /// <param name="applicationPartTypes">Application parts (optional)</param>
        /// <returns></returns>
        public static IClientBuilder CreateClientBuilder(ILogger logger,
                                                         ClusterInfoOption clusterInfo,
                                                         OrleansProviderOption providerOption,
                                                         IEnumerable <Type> applicationPartTypes = null)
        {
            var clientBuilder = new ClientBuilder()
                                .ConfigureCluster(clusterInfo, TimeSpan.FromSeconds(20), TimeSpan.FromMinutes(60))
                                .Configure <StatisticsOptions>(options =>
            {
                options.CollectionLevel = StatisticsLevel.Critical;
            });

            switch (providerOption.DefaultProvider.ToLower())
            {
            case "sqldb":
            {
                logger.LogTrace("Using SQL DB provider");
                var sqlDbSetting = providerOption.SQLDB.Cluster;
                try
                {
                    var helper = new ExtMethodInvoker("Orleans.Clustering.AdoNet");
                    var adoNetClusteringClientOptionsType  = helper.ExtensionLibAssembly.GetType("Orleans.Configuration.AdoNetClusteringClientOptions", true);
                    var adoNetClusteringClientOptionsValue = new Dictionary <string, object>
                    {
                        ["ConnectionString"] = sqlDbSetting.DbConn,
                        ["Invariant"]        = sqlDbSetting.Invariant ?? @"System.Data.SqlClient"
                    };
                    var configSqlDbClusteringAction =
                        CreateDelegateHelper.CreateAssignValueAction(adoNetClusteringClientOptionsType, "options", adoNetClusteringClientOptionsValue);

                    clientBuilder = helper.Invoke <IClientBuilder>(
                        new ExtMethodInfo {
                            MethodName = "UseAdoNetClustering", ExtendedType = typeof(IClientBuilder)
                        },
                        clientBuilder, configSqlDbClusteringAction);
                }
                catch (Exception ex)
                {
                    throw new SqlDbLibLoadFailedException(ex);
                }
            }
            break;

            case "mysql":
            {
                logger.LogTrace("Using MySQL DB provider");
                var mysqlDbSetting = providerOption.SQLDB.Cluster;
                try
                {
                    var helper = new ExtMethodInvoker("Orleans.Clustering.AdoNet");
                    var adoNetClusteringClientOptionsType  = helper.ExtensionLibAssembly.GetType("Orleans.Configuration.AdoNetClusteringClientOptions", true);
                    var adoNetClusteringClientOptionsValue = new Dictionary <string, object>
                    {
                        ["ConnectionString"] = mysqlDbSetting.DbConn,
                        ["Invariant"]        = mysqlDbSetting.Invariant ?? @"MySql.Data.MySqlClient"
                    };
                    var configSqlDbClusteringAction =
                        CreateDelegateHelper.CreateAssignValueAction(adoNetClusteringClientOptionsType, "options", adoNetClusteringClientOptionsValue);

                    clientBuilder = helper.Invoke <IClientBuilder>(
                        new ExtMethodInfo {
                            MethodName = "UseAdoNetClustering", ExtendedType = typeof(IClientBuilder)
                        },
                        clientBuilder, configSqlDbClusteringAction);
                }
                catch (Exception ex)
                {
                    throw new MySqlLibLoadFailedException(ex);
                }
            }
            break;

            case "mongodb":
            {
                logger.LogTrace("Using MongoDB provider...");
                var mongoSetting = providerOption.MongoDB.Cluster;
                try
                {
                    var helper = new ExtMethodInvoker("Orleans.Providers.MongoDB");
                    clientBuilder = helper.Invoke <IClientBuilder>(
                        new ExtMethodInfo {
                            MethodName = "UseMongoDBClient", ExtendedType = typeof(IClientBuilder)
                        },
                        clientBuilder, mongoSetting.DbConn);

                    var mongoDbMembershipTableOptionsType =
                        helper.ExtensionLibAssembly.GetType("Orleans.Providers.MongoDB.Configuration.MongoDBGatewayListProviderOptions", true);
                    var mongoDbMembershipTableOptionsValue = new Dictionary <string, object>
                    {
                        ["DatabaseName"] = mongoSetting.DbName
                    };
                    if (!string.IsNullOrEmpty(mongoSetting.CollectionPrefix))
                    {
                        mongoDbMembershipTableOptionsValue["CollectionPrefix"] = mongoSetting.CollectionPrefix;
                    }
                    var configMongoDbClusteringAction =
                        CreateDelegateHelper.CreateAssignValueAction(mongoDbMembershipTableOptionsType, "options", mongoDbMembershipTableOptionsValue);

                    clientBuilder = helper.Invoke <IClientBuilder>(
                        new ExtMethodInfo {
                            MethodName = "UseMongoDBClustering", ExtendedType = typeof(IClientBuilder)
                        },
                        clientBuilder, configMongoDbClusteringAction);
                }
                catch (Exception ex)
                {
                    throw new MongoDbLibLoadFailedException(ex);
                }
            }
            break;
            }

            if (applicationPartTypes != null)
            {
                clientBuilder.ConfigureApplicationParts(manager =>
                {
                    foreach (var applicationPartType in applicationPartTypes)
                    {
                        manager.AddApplicationPart(applicationPartType.Assembly).WithReferences();
                    }
                });
            }

            return(clientBuilder);
        }