コード例 #1
0
        public async Task <Response <ILoadBalancer> > Get(DownstreamReRoute reRoute, ServiceProviderConfiguration config)
        {
            var response = _serviceProviderFactory.Get(config, reRoute);

            if (response.IsError)
            {
                return(new ErrorResponse <ILoadBalancer>(response.Errors));
            }

            var serviceProvider = response.Data;

            switch (reRoute.LoadBalancerOptions?.Type)
            {
            case nameof(RoundRobin):
                return(new OkResponse <ILoadBalancer>(new RoundRobin(async() => await serviceProvider.Get())));

            case nameof(LeastConnection):
                return(new OkResponse <ILoadBalancer>(new LeastConnection(async() => await serviceProvider.Get(), reRoute.ServiceName)));

            case nameof(CookieStickySessions):
                var loadBalancer = new RoundRobin(async() => await serviceProvider.Get());
                var bus          = new InMemoryBus <StickySession>();
                return(new OkResponse <ILoadBalancer>(new CookieStickySessions(loadBalancer, reRoute.LoadBalancerOptions.Key, reRoute.LoadBalancerOptions.ExpiryInMs, bus)));

            default:
                return(new OkResponse <ILoadBalancer>(new NoLoadBalancer(async() => await serviceProvider.Get())));
            }
        }
コード例 #2
0
 public Response<ILoadBalancer> Create(DownstreamReRoute reRoute, IServiceDiscoveryProvider serviceProvider)
 {
     var loadBalancer = new RoundRobin(async () => await serviceProvider.Get());
     var bus = new InMemoryBus<StickySession>();
     return new OkResponse<ILoadBalancer>(new CookieStickySessions(loadBalancer, reRoute.LoadBalancerOptions.Key,
         reRoute.LoadBalancerOptions.ExpiryInMs, bus));
 }
コード例 #3
0
        public async Task <ILoadBalancer> Get(DownstreamReRoute reRoute, ServiceProviderConfiguration config)
        {
            var serviceProvider = _serviceProviderFactory.Get(config, reRoute);

            switch (reRoute.LoadBalancerOptions?.Type)
            {
            case nameof(RoundRobin):
                return(new RoundRobin(async() => await serviceProvider.Get()));

            case nameof(LeastConnection):
                return(new LeastConnection(async() => await serviceProvider.Get(), reRoute.ServiceName));

            case nameof(CookieStickySessions):
                var loadBalancer = new RoundRobin(async() => await serviceProvider.Get());
                return(new CookieStickySessions(loadBalancer, reRoute.LoadBalancerOptions.Key, reRoute.LoadBalancerOptions.ExpiryInMs));

            default:
                return(new NoLoadBalancer(await serviceProvider.Get()));
            }
        }