예제 #1
0
 internal UdfsClusterClient(
     UdfsClusterClientOptions options,
     IClusterClient clusterClient
     )
 {
     this.options  = options;
     ClusterClient = clusterClient;
 }
        public static void ConfigureWith(this UdfsClusterClientOptions options, OrleansClusterClientConfiguration configuration)
        {
            // Orleans information
            options.ClusterService.ClusterId = configuration.ClusterId;
            options.ClusterService.ServiceId = configuration.ServiceId;

            // Membership provider
            options.Membership.Enabled          = configuration.Membership.Enabled;
            options.Membership.ConnectionString = configuration.Membership.ConnectionString;
            options.Membership.Provider         = configuration.Membership.Provider;

            // Connection settings
            options.ConnectionRetryCount = configuration.ConnectionRetryCount;
        }
        public IUdfsClusterClient Build(
            UdfsClusterClientOptions clusterClientOptions
            )
        {
            var clientBuilder = new ClientBuilder();

            // Local or distribute cluster
            if (clusterClientOptions.Membership.Enabled)
            {
                clientBuilder.UseAdoNetClustering(
                    options =>
                {
                    options.Invariant        = clusterClientOptions.Membership.Provider;
                    options.ConnectionString = clusterClientOptions.Membership.ConnectionString;
                }
                    );
            }
            else
            {
                clientBuilder.UseLocalhostClustering();
            }

            //.ConfigureLogging(logging => logging.AddConsole())
            //.UsePerfCounterEnvironmentStatistics()
            //.Configure<ClientMessagingOptions>(options => options.ResponseTimeout = TimeSpan.FromSeconds(30))
            clientBuilder.Configure <ClusterOptions>(
                options =>
            {
                options.ClusterId = clusterClientOptions.ClusterService.ClusterId;
                options.ServiceId = clusterClientOptions.ClusterService.ServiceId;
            }
                );

            // Interfaces
            foreach (var item in clusterClientOptions.GrainAssemblies)
            {
                clientBuilder.ConfigureApplicationParts(parts => parts.AddApplicationPart(item).WithReferences());
            }

            // Build client
            return(new UdfsClusterClient(clusterClientOptions, clientBuilder.Build()));
        }