Ejemplo n.º 1
0
 public BestAvailableRuleTest()
     : base("BestAvailableRule")
 {
     _ping = new EasyHttpPing(_factory, 20);
     var collector = new DefaultServerStatusCollector();
     var rule = new BestAvailableRule(collector);
     _loadBalancer = new BaseLoadBalancer(1 * 1000, base._name, rule, _ping, new SerialPingStrategy(), _factory);
     _command = new LoadBalancerCommand(_loadBalancer, collector, null, null);
 }
Ejemplo n.º 2
0
 public WeightedResponseTimeRuleTest()
     : base("WeightedResponseTimeRule")
 {
     _ping = new EasyHttpPing(_factory, 20);
     var collector = new DefaultServerStatusCollector();
     var accumulater = new DefaultServerWeightAccumulater(collector);
     var rule = new WeightedResponseTimeRule(accumulater);
     _loadBalancer = new BaseLoadBalancer(1 * 1000, base._name, rule, _ping, new SerialPingStrategy(), _factory);
     _command = new LoadBalancerCommand(_loadBalancer, collector, null, null);
 }
Ejemplo n.º 3
0
        private LoadBalancerCommand GetCommand(LoadBalanceKey key)
        {
            if (_swiftyClientOptions.Eureka == null)
            {
                return(null);
            }
            if (_balancerCommands.TryGetValue(key, out LoadBalancerCommand x))
            {
                return(x);
            }
            lock (Syncs.GetOrAdd(key, k => new object()))
            {
                if (_balancerCommands.TryGetValue(key, out LoadBalancerCommand command))
                {
                    return(command);
                }

                var version    = key.Version;
                var vipAddress = key.VipAddress;
                var rule       = new FilterableRule(new VersionAffinityFilter(version));
                var eureka     = _swiftyClientOptions.Eureka;

                var balancer = LoadBalancerBuilder.NewBuilder()
                               .WithPing(_swiftyPing)
                               .WithPingStrategy(_swiftyClientOptions.PingStrategy)
                               .WithRule(rule)
                               .Build($"{vipAddress}:{version}", eureka.RegistryFetchIntervalSeconds * 1000 / 2);

                var collector    = new DefaultServerStatusCollector();
                var retryHandler = new DefaultRetryHandler(
                    _swiftyClientOptions.RetriesSameServer,
                    _swiftyClientOptions.RetriesNextServer,
                    _swiftyClientOptions.RetryEnabled,
                    CircuitTrippingException,
                    RetriableException);
                command = new LoadBalancerCommand(balancer, collector, retryHandler, null);

                var servers = DiscoveryManager.Instance.Client
                              .GetInstancesByVipAddress(vipAddress, _swiftyClientOptions.Secure)
                              .Where(ins => ins.Status == InstanceStatus.UP)
                              .Select(ins => new DiscoveryEnabledServer(ins, _swiftyClientOptions.Secure, _swiftyClientOptions.Eureka.AddressUsage) as Ribbon.Server)
                              .ToList();

                balancer.AddServers(servers);

                _balancerCommands.Add(key, command);
                return(command);
            }
        }
Ejemplo n.º 4
0
        public async void WeightedResponseTimeRuleTest()
        {
            var collector   = new DefaultServerStatusCollector();
            var accumulater = new DefaultServerWeightAccumulater(collector);
            var rule        = new Thrifty.MicroServices.Ribbon.Rules.WeightedResponseTimeRule(accumulater);
            var balancer    = new BaseLoadBalancer(1 * 1000, "demo", rule, Ping, new SerialPingStrategy(), LoggerFactory);

            accumulater.LoadBalancer = balancer;
            balancer.AddServers(Servers);
            var       command = new LoadBalancerCommand(balancer, null, null, null);
            const int count   = 1000;
            var       index   = 0;

            while (index++ < count)
            {
                Assert.True(await command.Submit(server => Task.FromResult(Ping.IsAlive(server))));
            }
        }