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()))); } }
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)); }
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())); } }