mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:42:50 +08:00
added builder for service provider config
This commit is contained in:
parent
9e9303c25f
commit
b4ef277c3e
@ -26,16 +26,12 @@ namespace Ocelot.Configuration.Builder
|
|||||||
private string _requestIdHeaderKey;
|
private string _requestIdHeaderKey;
|
||||||
private bool _isCached;
|
private bool _isCached;
|
||||||
private CacheOptions _fileCacheOptions;
|
private CacheOptions _fileCacheOptions;
|
||||||
private bool _useServiceDiscovery;
|
|
||||||
private string _serviceName;
|
private string _serviceName;
|
||||||
private string _serviceDiscoveryProvider;
|
|
||||||
private string _serviceDiscoveryAddress;
|
|
||||||
private string _downstreamScheme;
|
private string _downstreamScheme;
|
||||||
private string _downstreamHost;
|
private string _downstreamHost;
|
||||||
private int _dsPort;
|
private int _downstreamPort;
|
||||||
private string _loadBalancer;
|
private string _loadBalancer;
|
||||||
private string _serviceProviderHost;
|
private ServiceProviderConfiguraion _serviceProviderConfiguraion;
|
||||||
private int _serviceProviderPort;
|
|
||||||
|
|
||||||
public ReRouteBuilder()
|
public ReRouteBuilder()
|
||||||
{
|
{
|
||||||
@ -60,30 +56,12 @@ namespace Ocelot.Configuration.Builder
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReRouteBuilder WithServiceDiscoveryAddress(string serviceDiscoveryAddress)
|
|
||||||
{
|
|
||||||
_serviceDiscoveryAddress = serviceDiscoveryAddress;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReRouteBuilder WithServiceDiscoveryProvider(string serviceDiscoveryProvider)
|
|
||||||
{
|
|
||||||
_serviceDiscoveryProvider = serviceDiscoveryProvider;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReRouteBuilder WithServiceName(string serviceName)
|
public ReRouteBuilder WithServiceName(string serviceName)
|
||||||
{
|
{
|
||||||
_serviceName = serviceName;
|
_serviceName = serviceName;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReRouteBuilder WithUseServiceDiscovery(bool useServiceDiscovery)
|
|
||||||
{
|
|
||||||
_useServiceDiscovery = useServiceDiscovery;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReRouteBuilder WithDownstreamPathTemplate(string input)
|
public ReRouteBuilder WithDownstreamPathTemplate(string input)
|
||||||
{
|
{
|
||||||
_downstreamPathTemplate = input;
|
_downstreamPathTemplate = input;
|
||||||
@ -198,7 +176,7 @@ namespace Ocelot.Configuration.Builder
|
|||||||
|
|
||||||
public ReRouteBuilder WithDownstreamPort(int port)
|
public ReRouteBuilder WithDownstreamPort(int port)
|
||||||
{
|
{
|
||||||
_dsPort = port;
|
_downstreamPort = port;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,15 +186,9 @@ namespace Ocelot.Configuration.Builder
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReRouteBuilder WithServiceProviderHost(string serviceProviderHost)
|
public ReRouteBuilder WithServiceProviderConfiguraion(ServiceProviderConfiguraion serviceProviderConfiguraion)
|
||||||
{
|
{
|
||||||
_serviceProviderHost = serviceProviderHost;
|
_serviceProviderConfiguraion = serviceProviderConfiguraion;
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ReRouteBuilder WithServiceProviderPort(int serviceProviderPort)
|
|
||||||
{
|
|
||||||
_serviceProviderPort = serviceProviderPort;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +198,7 @@ namespace Ocelot.Configuration.Builder
|
|||||||
_isAuthenticated, new AuthenticationOptions(_authenticationProvider, _authenticationProviderUrl, _scopeName,
|
_isAuthenticated, new AuthenticationOptions(_authenticationProvider, _authenticationProviderUrl, _scopeName,
|
||||||
_requireHttps, _additionalScopes, _scopeSecret), _configHeaderExtractorProperties, _claimToClaims, _routeClaimRequirement,
|
_requireHttps, _additionalScopes, _scopeSecret), _configHeaderExtractorProperties, _claimToClaims, _routeClaimRequirement,
|
||||||
_isAuthorised, _claimToQueries, _requestIdHeaderKey, _isCached, _fileCacheOptions, _downstreamScheme, _loadBalancer,
|
_isAuthorised, _claimToQueries, _requestIdHeaderKey, _isCached, _fileCacheOptions, _downstreamScheme, _loadBalancer,
|
||||||
_downstreamHost, _dsPort, _loadBalancerKey, new ServiceProviderConfiguraion(_serviceName, _downstreamHost, _dsPort, _useServiceDiscovery, _serviceDiscoveryProvider, _serviceProviderHost, _serviceProviderPort));
|
_downstreamHost, _downstreamPort, _loadBalancerKey, _serviceProviderConfiguraion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,10 +110,15 @@ namespace Ocelot.Configuration.Creator
|
|||||||
|
|
||||||
var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;
|
var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;
|
||||||
|
|
||||||
var serviceProviderConfiguration = new ServiceProviderConfiguraion(fileReRoute.ServiceName,
|
var serviceProviderConfiguration = new ServiceProviderConfiguraionBuilder()
|
||||||
fileReRoute.DownstreamHost, fileReRoute.DownstreamPort, useServiceDiscovery,
|
.WithServiceName(fileReRoute.ServiceName)
|
||||||
globalConfiguration?.ServiceDiscoveryProvider?.Provider, globalConfiguration?.ServiceDiscoveryProvider?.Host,
|
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
||||||
serviceProviderPort);
|
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
||||||
|
.WithUseServiceDiscovery(useServiceDiscovery)
|
||||||
|
.WithServiceDiscoveryProvider(globalConfiguration?.ServiceDiscoveryProvider?.Provider)
|
||||||
|
.WithServiceDiscoveryProviderHost(globalConfiguration?.ServiceDiscoveryProvider?.Host)
|
||||||
|
.WithServiceDiscoveryProviderPort(serviceProviderPort)
|
||||||
|
.Build();
|
||||||
|
|
||||||
if (isAuthenticated)
|
if (isAuthenticated)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
namespace Ocelot.Configuration
|
||||||
|
{
|
||||||
|
public class ServiceProviderConfiguraionBuilder
|
||||||
|
{
|
||||||
|
private string _serviceName;
|
||||||
|
private string _downstreamHost;
|
||||||
|
private int _downstreamPort;
|
||||||
|
private bool _userServiceDiscovery;
|
||||||
|
private string _serviceDiscoveryProvider;
|
||||||
|
private string _serviceDiscoveryProviderHost;
|
||||||
|
private int _serviceDiscoveryProviderPort;
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithServiceName(string serviceName)
|
||||||
|
{
|
||||||
|
_serviceName = serviceName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithDownstreamHost(string downstreamHost)
|
||||||
|
{
|
||||||
|
_downstreamHost = downstreamHost;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithDownstreamPort(int downstreamPort)
|
||||||
|
{
|
||||||
|
_downstreamPort = downstreamPort;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithUseServiceDiscovery(bool userServiceDiscovery)
|
||||||
|
{
|
||||||
|
_userServiceDiscovery = userServiceDiscovery;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithServiceDiscoveryProvider(string serviceDiscoveryProvider)
|
||||||
|
{
|
||||||
|
_serviceDiscoveryProvider = serviceDiscoveryProvider;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithServiceDiscoveryProviderHost(string serviceDiscoveryProviderHost)
|
||||||
|
{
|
||||||
|
_serviceDiscoveryProviderHost = serviceDiscoveryProviderHost;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraionBuilder WithServiceDiscoveryProviderPort(int serviceDiscoveryProviderPort)
|
||||||
|
{
|
||||||
|
_serviceDiscoveryProviderPort = serviceDiscoveryProviderPort;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ServiceProviderConfiguraion Build()
|
||||||
|
{
|
||||||
|
return new ServiceProviderConfiguraion(_serviceName, _downstreamHost, _downstreamPort, _userServiceDiscovery,
|
||||||
|
_serviceDiscoveryProvider, _serviceDiscoveryProviderHost,_serviceDiscoveryProviderPort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -14,16 +14,7 @@ namespace Ocelot.LoadBalancer.LoadBalancers
|
|||||||
|
|
||||||
public async Task<ILoadBalancer> Get(ReRoute reRoute)
|
public async Task<ILoadBalancer> Get(ReRoute reRoute)
|
||||||
{
|
{
|
||||||
var serviceConfig = new ServiceProviderConfiguraion(
|
var serviceProvider = _serviceProviderFactory.Get(reRoute.ServiceProviderConfiguraion);
|
||||||
reRoute.ServiceProviderConfiguraion.ServiceName,
|
|
||||||
reRoute.ServiceProviderConfiguraion.DownstreamHost,
|
|
||||||
reRoute.ServiceProviderConfiguraion.DownstreamPort,
|
|
||||||
reRoute.ServiceProviderConfiguraion.UseServiceDiscovery,
|
|
||||||
reRoute.ServiceProviderConfiguraion.ServiceDiscoveryProvider,
|
|
||||||
reRoute.ServiceProviderConfiguraion.ServiceProviderHost,
|
|
||||||
reRoute.ServiceProviderConfiguraion.ServiceProviderPort);
|
|
||||||
|
|
||||||
var serviceProvider = _serviceProviderFactory.Get(serviceConfig);
|
|
||||||
|
|
||||||
switch (reRoute.LoadBalancer)
|
switch (reRoute.LoadBalancer)
|
||||||
{
|
{
|
||||||
|
@ -165,9 +165,11 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
.WithUpstreamHttpMethod("Get")
|
.WithUpstreamHttpMethod("Get")
|
||||||
.WithUpstreamTemplatePattern("(?i)/api/products/.*/$")
|
.WithUpstreamTemplatePattern("(?i)/api/products/.*/$")
|
||||||
.WithServiceName("ProductService")
|
.WithServiceName("ProductService")
|
||||||
|
.WithServiceProviderConfiguraion(new ServiceProviderConfiguraionBuilder()
|
||||||
.WithUseServiceDiscovery(true)
|
.WithUseServiceDiscovery(true)
|
||||||
.WithServiceDiscoveryProvider("consul")
|
.WithServiceDiscoveryProvider("consul")
|
||||||
.WithServiceDiscoveryAddress("127.0.01")
|
.WithServiceDiscoveryProviderHost("127.0.0.1")
|
||||||
|
.Build())
|
||||||
.Build()
|
.Build()
|
||||||
}))
|
}))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
@ -198,9 +200,9 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
.WithUpstreamTemplate("/api/products/{productId}")
|
.WithUpstreamTemplate("/api/products/{productId}")
|
||||||
.WithUpstreamHttpMethod("Get")
|
.WithUpstreamHttpMethod("Get")
|
||||||
.WithUpstreamTemplatePattern("(?i)/api/products/.*/$")
|
.WithUpstreamTemplatePattern("(?i)/api/products/.*/$")
|
||||||
|
.WithServiceProviderConfiguraion(new ServiceProviderConfiguraionBuilder()
|
||||||
.WithUseServiceDiscovery(false)
|
.WithUseServiceDiscovery(false)
|
||||||
.WithServiceDiscoveryProvider(null)
|
.Build())
|
||||||
.WithServiceDiscoveryAddress(null)
|
|
||||||
.Build()
|
.Build()
|
||||||
}))
|
}))
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
|
@ -24,17 +24,11 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
_factory = new LoadBalancerFactory(_serviceProviderFactory.Object);
|
_factory = new LoadBalancerFactory(_serviceProviderFactory.Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenTheServiceProviderFactoryReturns()
|
|
||||||
{
|
|
||||||
_serviceProviderFactory
|
|
||||||
.Setup(x => x.Get(It.IsAny<ServiceProviderConfiguraion>()))
|
|
||||||
.Returns(_serviceProvider.Object);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_no_load_balancer()
|
public void should_return_no_load_balancer()
|
||||||
{
|
{
|
||||||
var reRoute = new ReRouteBuilder()
|
var reRoute = new ReRouteBuilder()
|
||||||
|
.WithServiceProviderConfiguraion(new ServiceProviderConfiguraionBuilder().Build())
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
this.Given(x => x.GivenAReRoute(reRoute))
|
this.Given(x => x.GivenAReRoute(reRoute))
|
||||||
@ -49,6 +43,7 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
{
|
{
|
||||||
var reRoute = new ReRouteBuilder()
|
var reRoute = new ReRouteBuilder()
|
||||||
.WithLoadBalancer("RoundRobin")
|
.WithLoadBalancer("RoundRobin")
|
||||||
|
.WithServiceProviderConfiguraion(new ServiceProviderConfiguraionBuilder().Build())
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
this.Given(x => x.GivenAReRoute(reRoute))
|
this.Given(x => x.GivenAReRoute(reRoute))
|
||||||
@ -63,6 +58,7 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
{
|
{
|
||||||
var reRoute = new ReRouteBuilder()
|
var reRoute = new ReRouteBuilder()
|
||||||
.WithLoadBalancer("LeastConnection")
|
.WithLoadBalancer("LeastConnection")
|
||||||
|
.WithServiceProviderConfiguraion(new ServiceProviderConfiguraionBuilder().Build())
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
this.Given(x => x.GivenAReRoute(reRoute))
|
this.Given(x => x.GivenAReRoute(reRoute))
|
||||||
@ -77,6 +73,7 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
{
|
{
|
||||||
var reRoute = new ReRouteBuilder()
|
var reRoute = new ReRouteBuilder()
|
||||||
.WithLoadBalancer("RoundRobin")
|
.WithLoadBalancer("RoundRobin")
|
||||||
|
.WithServiceProviderConfiguraion(new ServiceProviderConfiguraionBuilder().Build())
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
this.Given(x => x.GivenAReRoute(reRoute))
|
this.Given(x => x.GivenAReRoute(reRoute))
|
||||||
@ -86,6 +83,13 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GivenTheServiceProviderFactoryReturns()
|
||||||
|
{
|
||||||
|
_serviceProviderFactory
|
||||||
|
.Setup(x => x.Get(It.IsAny<ServiceProviderConfiguraion>()))
|
||||||
|
.Returns(_serviceProvider.Object);
|
||||||
|
}
|
||||||
|
|
||||||
private void ThenTheServiceProviderIsCalledCorrectly()
|
private void ThenTheServiceProviderIsCalledCorrectly()
|
||||||
{
|
{
|
||||||
_serviceProviderFactory
|
_serviceProviderFactory
|
||||||
|
@ -20,7 +20,11 @@ namespace Ocelot.UnitTests.ServiceDiscovery
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_no_service_provider()
|
public void should_return_no_service_provider()
|
||||||
{
|
{
|
||||||
var serviceConfig = new ServiceProviderConfiguraion("product", "127.0.0.1", 80, false, "Does not matter", string.Empty, 0);
|
var serviceConfig = new ServiceProviderConfiguraionBuilder()
|
||||||
|
.WithDownstreamHost("127.0.0.1")
|
||||||
|
.WithDownstreamPort(80)
|
||||||
|
.WithUseServiceDiscovery(false)
|
||||||
|
.Build();
|
||||||
|
|
||||||
this.Given(x => x.GivenTheReRoute(serviceConfig))
|
this.Given(x => x.GivenTheReRoute(serviceConfig))
|
||||||
.When(x => x.WhenIGetTheServiceProvider())
|
.When(x => x.WhenIGetTheServiceProvider())
|
||||||
@ -31,7 +35,11 @@ namespace Ocelot.UnitTests.ServiceDiscovery
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_return_consul_service_provider()
|
public void should_return_consul_service_provider()
|
||||||
{
|
{
|
||||||
var serviceConfig = new ServiceProviderConfiguraion("product", string.Empty, 0, true, "Consul", string.Empty, 0);
|
var serviceConfig = new ServiceProviderConfiguraionBuilder()
|
||||||
|
.WithServiceName("product")
|
||||||
|
.WithUseServiceDiscovery(true)
|
||||||
|
.WithServiceDiscoveryProvider("Consul")
|
||||||
|
.Build();
|
||||||
|
|
||||||
this.Given(x => x.GivenTheReRoute(serviceConfig))
|
this.Given(x => x.GivenTheReRoute(serviceConfig))
|
||||||
.When(x => x.WhenIGetTheServiceProvider())
|
.When(x => x.WhenIGetTheServiceProvider())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user