Example #1
0
        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);
            }));
        }