Esempio n. 1
0
        //private static ILoggerFactory CreateLoggerFactory(IServiceProvider serviceProvider)
        //{

        //    OrleansConfig config = serviceProvider.GetService<OrleansConfig>();
        //    ILoggerFactory loggerFactory = new LoggerFactory();
        //    LogLevel logLevel = Enum.Parse<LogLevel>(config.LogLevel, true);
        //    string[] loggerTypes = config.LoggerTypes?.Split(";", StringSplitOptions.RemoveEmptyEntries);

        //    if(HasLoggerType(config, "console"))
        //    {
        //        loggerFactory.AddConsole(logLevel);
        //    }

        //    if (HasLoggerType(config, "debug"))
        //    {
        //        loggerFactory.AddDebug(logLevel);
        //    }

        //    if(HasLoggerType(config, "appinsights"))
        //    {
        //        AppInsightsOptions appOptions = new AppInsightsOptions()
        //        {
        //            DeveloperMode = false,
        //            InstrumentationKey = config.AppInsightsKey

        //        };

        //        loggerFactory.AddAppInsights(appOptions);
        //    }

        //    return loggerFactory;
        //}

        private static IClusterClient CreateClusterClient(IServiceProvider serviceProvider)
        {
            OrleansConfig config      = serviceProvider.GetService <OrleansConfig>();
            string        storageType = GetStorageType(config.DataConnectionString);

            TcpGatewayOptions options = serviceProvider.GetOptionsByName <TcpGatewayOptions>("TcpGatewayOptions");

            if (config.Dockerized)
            {
                var localClient = new ClientBuilder()
                                  .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly))
                                  .UseLocalhostClustering()
                                  .Build();

                localClient.Connect(RetryFilter).GetAwaiter();
                return(localClient);
            }
            else
            {
                var client = new ClientBuilder()
                             .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly))
                             .Configure <testME.ClusterOptions>(op =>
                {
                    op.ClusterId = config.ClusterId;
                    op.ServiceId = config.ServiceId;
                });



                if (HasLoggerType(config, "appinsights"))
                {
                    client.AddApplicationInsightsTelemetryConsumer(config.AppInsightsKey);
                }

                if (storageType == "Redis")
                {
                    ILoggerFactory loggerFactory = serviceProvider.GetService <ILoggerFactory>();
                    ILogger <RedisGatewayListProvider> logger = loggerFactory.CreateLogger <RedisGatewayListProvider>();
                    client.UseRedisGatewayListProvider(logger, op =>
                                                       op.ConnectionString = config.DataConnectionString
                                                       );
                }
                else if (storageType == "AzureStorage")
                {
                    client.UseAzureStorageClustering(op => op.ConnectionString = config.DataConnectionString);
                }

                IClusterClient clusterClient = client.Build();

                clusterClient.Connect(RetryFilter).GetAwaiter();
                return(clusterClient);
            }
        }
Esempio n. 2
0
        public static void AddSingletonOrleansClusterClient(this IServiceCollection services, OrleansConfig config)
        {
            services.AddSingleton(serviceProvider =>
            {
                var builder = new ClientBuilder();
                if (!string.IsNullOrEmpty(config.InstrumentationKey))
                {
                    builder.AddApplicationInsightsTelemetryConsumer(config.InstrumentationKey);
                }

                builder.AddOrleansClusterClient(config);
                IClusterClient client = builder.Build();
                client.Connect(CreateRetryFilter()).GetAwaiter().GetResult();
                return(client);
            });
        }