#349 always get all the services when using no loadbalancer (#362)

This commit is contained in:
Tom Pallister
2018-05-17 07:46:01 +01:00
committed by GitHub
parent 7ed058687d
commit f96adf9583
4 changed files with 45 additions and 17 deletions

View File

@ -29,7 +29,7 @@ namespace Ocelot.LoadBalancer.LoadBalancers
var bus = new InMemoryBus<StickySession>();
return new CookieStickySessions(loadBalancer, reRoute.LoadBalancerOptions.Key, reRoute.LoadBalancerOptions.ExpiryInMs, bus);
default:
return new NoLoadBalancer(await serviceProvider.Get());
return new NoLoadBalancer(async () => await serviceProvider.Get());
}
}
}

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Ocelot.Middleware;
@ -9,22 +10,23 @@ namespace Ocelot.LoadBalancer.LoadBalancers
{
public class NoLoadBalancer : ILoadBalancer
{
private readonly List<Service> _services;
private readonly Func<Task<List<Service>>> _services;
public NoLoadBalancer(List<Service> services)
public NoLoadBalancer(Func<Task<List<Service>>> services)
{
_services = services;
}
public async Task<Response<ServiceHostAndPort>> Lease(DownstreamContext downstreamContext)
{
var services = await _services();
//todo first or default could be null..
if (_services == null || _services.Count == 0)
if (services == null || services.Count == 0)
{
return new ErrorResponse<ServiceHostAndPort>(new ServicesAreEmptyError("There were no services in NoLoadBalancer"));
}
var service = await Task.FromResult(_services.FirstOrDefault());
var service = await Task.FromResult(services.FirstOrDefault());
return new OkResponse<ServiceHostAndPort>(service.HostAndPort);
}

View File

@ -20,13 +20,13 @@ namespace Ocelot.LoadBalancer.LoadBalancers
public async Task<Response<ServiceHostAndPort>> Lease(DownstreamContext downstreamContext)
{
var services = await _services.Invoke();
var services = await _services();
if (_last >= services.Count)
{
_last = 0;
}
var next = await Task.FromResult(services[_last]);
var next = services[_last];
_last++;
return new OkResponse<ServiceHostAndPort>(next.HostAndPort);
}