Exemplo n.º 1
0
        private static IClusterClient CreateClusterClient(IServiceProvider serviceProvider)
        {
            PiraeusGatewayOptions options = serviceProvider.GetOptionsByName <PiraeusGatewayOptions>("PiraeusGatewayOptions");

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

                localClient.Connect(RetryFilter).GetAwaiter();

                return(localClient);
            }
            else
            {
                var client = new ClientBuilder()
                             .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly))
                             .Configure <OrleansConfiguration.ClusterOptions>(op =>
                {
                    op.ClusterId = options.ClusterId;
                    op.ServiceId = options.ServiceId;
                });

                client.AddLoggers(options);
                if (options.StorageType == OrleansStorageType.Redis)
                {
                    client.UseRedisGatewayListProvider(op => op.ConnectionString = options.DataConnectionString);
                }
                if (options.StorageType == OrleansStorageType.AzureStorage)
                {
                    client.UseAzureStorageClustering(op => op.ConnectionString = options.DataConnectionString);
                }

                IClusterClient clusterClient = client.Build();

                clusterClient.Connect(RetryFilter).GetAwaiter();
                return(clusterClient);
            }
        }