mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-06-19 17:08:15 +08:00
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user