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); }
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); }
public async void CommandTest() { var balancer = LoadBalancerBuilder.NewBuilder() .WithPing(Ping) .WithRule(new Thrifty.MicroServices.Ribbon.Rules.RoundRobinRule()).Build("demo", 1 * 1000); balancer.AddServers(Servers); var command = new LoadBalancerCommand(balancer, null, null, null); var x = await command.Submit(s => Task.FromResult(Ping.IsAlive(s))); Assert.True(x); }
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); } }
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)))); } }