public StreamApiRequestSender( [NotNull] IClusterProvider clusterProvider, [NotNull] ILog log, [NotNull] BufferPool bufferPool, [CanBeNull] ClusterClientSetup additionalSetup) { this.log = log; this.bufferPool = bufferPool; client = ClusterClientFactory.Create( clusterProvider, log, Constants.ServiceNames.StreamApi, config => { config.SetupUniversalTransport( new UniversalTransportSettings { BufferFactory = bufferPool.Rent }); config.AddResponseTransform(TryDecompress); additionalSetup?.Invoke(config); }); responseAnalyzer = new ResponseAnalyzer(ResponseAnalysisContext.Stream); compressionEnabled = LZ4Helper.Enabled; }
private static ClusterClient CreateClient(IClusterProvider cluster, ClusterClientSetup setup, ILog log, TimeSpan timeout) { return(new ClusterClient( log.WithMinimumLevel(LogLevel.Warn), config => { config.ClusterProvider = cluster; config.SetupUniversalTransport(); config.DefaultTimeout = timeout; config.DefaultRequestStrategy = Strategy.Forking3; config.Logging = new LoggingOptions { LogRequestDetails = false, LogResultDetails = false }; config.MaxReplicasUsedPerRequest = int.MaxValue; config.TargetServiceName = "ClusterConfig"; config.SetupWeighedReplicaOrdering( builder => builder.AddAdaptiveHealthModifierWithLinearDecay(TimeSpan.FromMinutes(2))); config.SetupResponseCriteria( new AcceptNonRetriableCriterion(), new Reject404ErrorsCriterion(), new RejectNetworkErrorsCriterion(), new RejectServerErrorsCriterion(), new RejectThrottlingErrorsCriterion(), new RejectUnknownErrorsCriterion(), new AlwaysAcceptCriterion()); config.AddResponseTransform(new GzipBodyTransform()); config.RetryPolicy = new RemoteRetryPolicy(); config.RetryStrategy = new LinearBackoffRetryStrategy(5, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(3)); setup?.Invoke(config); })); }
public static Clusterclient.Core.ClusterClient Create( [NotNull] IClusterProvider clusterProvider, [NotNull] ILog log, [NotNull] string serviceName, [CanBeNull] ClusterClientSetup additionalSetup) { return(new Clusterclient.Core.ClusterClient( log, configuration => { configuration.TargetServiceName = serviceName; configuration.ClusterProvider = clusterProvider; configuration.Transport = new UniversalTransport(log); configuration.DefaultTimeout = 30.Seconds(); configuration.DefaultRequestStrategy = Strategy.Forking2; configuration.SetupWeighedReplicaOrdering(builder => builder.AddAdaptiveHealthModifierWithLinearDecay(10.Minutes())); configuration.SetupReplicaBudgeting(configuration.TargetServiceName); configuration.SetupAdaptiveThrottling(configuration.TargetServiceName); additionalSetup?.Invoke(configuration); })); }