mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:22:50 +08:00
pulling out service config cretor
This commit is contained in:
parent
d4119ab33d
commit
fff743ccf8
@ -25,7 +25,7 @@ namespace Ocelot.Configuration.Builder
|
|||||||
private string _downstreamHost;
|
private string _downstreamHost;
|
||||||
private int _downstreamPort;
|
private int _downstreamPort;
|
||||||
private string _loadBalancer;
|
private string _loadBalancer;
|
||||||
private ServiceProviderConfiguraion _serviceProviderConfiguraion;
|
private ServiceProviderConfiguration _serviceProviderConfiguraion;
|
||||||
private bool _useQos;
|
private bool _useQos;
|
||||||
private QoSOptions _qosOptions;
|
private QoSOptions _qosOptions;
|
||||||
public bool _enableRateLimiting;
|
public bool _enableRateLimiting;
|
||||||
@ -150,7 +150,7 @@ namespace Ocelot.Configuration.Builder
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReRouteBuilder WithServiceProviderConfiguraion(ServiceProviderConfiguraion serviceProviderConfiguraion)
|
public ReRouteBuilder WithServiceProviderConfiguraion(ServiceProviderConfiguration serviceProviderConfiguraion)
|
||||||
{
|
{
|
||||||
_serviceProviderConfiguraion = serviceProviderConfiguraion;
|
_serviceProviderConfiguraion = serviceProviderConfiguraion;
|
||||||
return this;
|
return this;
|
||||||
|
@ -53,9 +53,9 @@ namespace Ocelot.Configuration.Builder
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ServiceProviderConfiguraion Build()
|
public ServiceProviderConfiguration Build()
|
||||||
{
|
{
|
||||||
return new ServiceProviderConfiguraion(_serviceName, _downstreamHost, _downstreamPort, _userServiceDiscovery,
|
return new ServiceProviderConfiguration(_serviceName, _downstreamHost, _downstreamPort, _userServiceDiscovery,
|
||||||
_serviceDiscoveryProvider, _serviceDiscoveryProviderHost,_serviceDiscoveryProviderPort);
|
_serviceDiscoveryProvider, _serviceDiscoveryProviderHost,_serviceDiscoveryProviderPort);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
private readonly IAuthenticationOptionsCreator _authOptionsCreator;
|
private readonly IAuthenticationOptionsCreator _authOptionsCreator;
|
||||||
private IUpstreamTemplatePatternCreator _upstreamTemplatePatternCreator;
|
private IUpstreamTemplatePatternCreator _upstreamTemplatePatternCreator;
|
||||||
private IRequestIdKeyCreator _requestIdKeyCreator;
|
private IRequestIdKeyCreator _requestIdKeyCreator;
|
||||||
|
private IServiceProviderConfigurationCreator _serviceProviderConfigCreator;
|
||||||
|
|
||||||
public FileOcelotConfigurationCreator(
|
public FileOcelotConfigurationCreator(
|
||||||
IOptions<FileConfiguration> options,
|
IOptions<FileConfiguration> options,
|
||||||
@ -44,7 +45,8 @@ namespace Ocelot.Configuration.Creator
|
|||||||
IClaimsToThingCreator claimsToThingCreator,
|
IClaimsToThingCreator claimsToThingCreator,
|
||||||
IAuthenticationOptionsCreator authOptionsCreator,
|
IAuthenticationOptionsCreator authOptionsCreator,
|
||||||
IUpstreamTemplatePatternCreator upstreamTemplatePatternCreator,
|
IUpstreamTemplatePatternCreator upstreamTemplatePatternCreator,
|
||||||
IRequestIdKeyCreator requestIdKeyCreator)
|
IRequestIdKeyCreator requestIdKeyCreator,
|
||||||
|
IServiceProviderConfigurationCreator serviceProviderConfigCreator)
|
||||||
{
|
{
|
||||||
_requestIdKeyCreator = requestIdKeyCreator;
|
_requestIdKeyCreator = requestIdKeyCreator;
|
||||||
_upstreamTemplatePatternCreator = upstreamTemplatePatternCreator;
|
_upstreamTemplatePatternCreator = upstreamTemplatePatternCreator;
|
||||||
@ -57,6 +59,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
_configurationValidator = configurationValidator;
|
_configurationValidator = configurationValidator;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_claimsToThingCreator = claimsToThingCreator;
|
_claimsToThingCreator = claimsToThingCreator;
|
||||||
|
_serviceProviderConfigCreator = serviceProviderConfigCreator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Response<IOcelotConfiguration>> Create()
|
public async Task<Response<IOcelotConfiguration>> Create()
|
||||||
@ -110,13 +113,13 @@ namespace Ocelot.Configuration.Creator
|
|||||||
|
|
||||||
var requestIdKey = _requestIdKeyCreator.Create(fileReRoute, globalConfiguration);
|
var requestIdKey = _requestIdKeyCreator.Create(fileReRoute, globalConfiguration);
|
||||||
|
|
||||||
var reRouteKey = BuildReRouteKey(fileReRoute);
|
var reRouteKey = CreateReRouteKey(fileReRoute);
|
||||||
|
|
||||||
var upstreamTemplatePattern = _upstreamTemplatePatternCreator.Create(fileReRoute);
|
var upstreamTemplatePattern = _upstreamTemplatePatternCreator.Create(fileReRoute);
|
||||||
|
|
||||||
var isQos = IsQoS(fileReRoute);
|
var isQos = IsQoS(fileReRoute);
|
||||||
|
|
||||||
var serviceProviderConfiguration = BuildServiceProviderConfiguration(fileReRoute, globalConfiguration);
|
var serviceProviderConfiguration = _serviceProviderConfigCreator.Create(fileReRoute, globalConfiguration);
|
||||||
|
|
||||||
var authOptionsForRoute = _authOptionsCreator.Create(fileReRoute);
|
var authOptionsForRoute = _authOptionsCreator.Create(fileReRoute);
|
||||||
|
|
||||||
@ -213,7 +216,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
return fileReRoute.FileCacheOptions.TtlSeconds > 0;
|
return fileReRoute.FileCacheOptions.TtlSeconds > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string BuildReRouteKey(FileReRoute fileReRoute)
|
private string CreateReRouteKey(FileReRoute fileReRoute)
|
||||||
{
|
{
|
||||||
//note - not sure if this is the correct key, but this is probably the only unique key i can think of given my poor brain
|
//note - not sure if this is the correct key, but this is probably the only unique key i can think of given my poor brain
|
||||||
var loadBalancerKey = $"{fileReRoute.UpstreamPathTemplate}{fileReRoute.UpstreamHttpMethod}";
|
var loadBalancerKey = $"{fileReRoute.UpstreamPathTemplate}{fileReRoute.UpstreamHttpMethod}";
|
||||||
@ -232,24 +235,6 @@ namespace Ocelot.Configuration.Creator
|
|||||||
_qosProviderHouse.Add(reRoute.ReRouteKey, loadBalancer);
|
_qosProviderHouse.Add(reRoute.ReRouteKey, loadBalancer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ServiceProviderConfiguraion BuildServiceProviderConfiguration(FileReRoute fileReRoute, FileGlobalConfiguration globalConfiguration)
|
|
||||||
{
|
|
||||||
var useServiceDiscovery = !string.IsNullOrEmpty(fileReRoute.ServiceName)
|
|
||||||
&& !string.IsNullOrEmpty(globalConfiguration?.ServiceDiscoveryProvider?.Provider);
|
|
||||||
|
|
||||||
var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;
|
|
||||||
|
|
||||||
return new ServiceProviderConfiguraionBuilder()
|
|
||||||
.WithServiceName(fileReRoute.ServiceName)
|
|
||||||
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
|
||||||
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
|
||||||
.WithUseServiceDiscovery(useServiceDiscovery)
|
|
||||||
.WithServiceDiscoveryProvider(globalConfiguration?.ServiceDiscoveryProvider?.Provider)
|
|
||||||
.WithServiceDiscoveryProviderHost(globalConfiguration?.ServiceDiscoveryProvider?.Host)
|
|
||||||
.WithServiceDiscoveryProviderPort(serviceProviderPort)
|
|
||||||
.Build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsPlaceHolder(string upstreamTemplate, int i)
|
private bool IsPlaceHolder(string upstreamTemplate, int i)
|
||||||
{
|
{
|
||||||
return upstreamTemplate[i] == '{';
|
return upstreamTemplate[i] == '{';
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
using Ocelot.Configuration.File;
|
||||||
|
|
||||||
|
namespace Ocelot.Configuration.Creator
|
||||||
|
{
|
||||||
|
public interface IServiceProviderConfigurationCreator
|
||||||
|
{
|
||||||
|
ServiceProviderConfiguration Create(FileReRoute fileReRoute, FileGlobalConfiguration globalConfiguration);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
using Ocelot.Configuration.Builder;
|
||||||
|
using Ocelot.Configuration.File;
|
||||||
|
|
||||||
|
namespace Ocelot.Configuration.Creator
|
||||||
|
{
|
||||||
|
public class ServiceProviderConfigurationCreator : IServiceProviderConfigurationCreator
|
||||||
|
{
|
||||||
|
public ServiceProviderConfiguration Create(FileReRoute fileReRoute, FileGlobalConfiguration globalConfiguration)
|
||||||
|
{
|
||||||
|
var useServiceDiscovery = !string.IsNullOrEmpty(fileReRoute.ServiceName)
|
||||||
|
&& !string.IsNullOrEmpty(globalConfiguration?.ServiceDiscoveryProvider?.Provider);
|
||||||
|
|
||||||
|
var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;
|
||||||
|
|
||||||
|
return new ServiceProviderConfiguraionBuilder()
|
||||||
|
.WithServiceName(fileReRoute.ServiceName)
|
||||||
|
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
||||||
|
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
||||||
|
.WithUseServiceDiscovery(useServiceDiscovery)
|
||||||
|
.WithServiceDiscoveryProvider(globalConfiguration?.ServiceDiscoveryProvider?.Provider)
|
||||||
|
.WithServiceDiscoveryProviderHost(globalConfiguration?.ServiceDiscoveryProvider?.Host)
|
||||||
|
.WithServiceDiscoveryProviderPort(serviceProviderPort)
|
||||||
|
.Build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -25,7 +25,7 @@ namespace Ocelot.Configuration
|
|||||||
string downstreamHost,
|
string downstreamHost,
|
||||||
int downstreamPort,
|
int downstreamPort,
|
||||||
string reRouteKey,
|
string reRouteKey,
|
||||||
ServiceProviderConfiguraion serviceProviderConfiguraion,
|
ServiceProviderConfiguration serviceProviderConfiguraion,
|
||||||
bool isQos,
|
bool isQos,
|
||||||
QoSOptions qos,
|
QoSOptions qos,
|
||||||
bool enableRateLimit,
|
bool enableRateLimit,
|
||||||
@ -81,7 +81,7 @@ namespace Ocelot.Configuration
|
|||||||
public string LoadBalancer {get;private set;}
|
public string LoadBalancer {get;private set;}
|
||||||
public string DownstreamHost { get; private set; }
|
public string DownstreamHost { get; private set; }
|
||||||
public int DownstreamPort { get; private set; }
|
public int DownstreamPort { get; private set; }
|
||||||
public ServiceProviderConfiguraion ServiceProviderConfiguraion { get; private set; }
|
public ServiceProviderConfiguration ServiceProviderConfiguraion { get; private set; }
|
||||||
public bool EnableEndpointRateLimiting { get; private set; }
|
public bool EnableEndpointRateLimiting { get; private set; }
|
||||||
public RateLimitOptions RateLimitOptions { get; private set; }
|
public RateLimitOptions RateLimitOptions { get; private set; }
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
namespace Ocelot.Configuration
|
namespace Ocelot.Configuration
|
||||||
{
|
{
|
||||||
public class ServiceProviderConfiguraion
|
public class ServiceProviderConfiguration
|
||||||
{
|
{
|
||||||
public ServiceProviderConfiguraion(string serviceName, string downstreamHost,
|
public ServiceProviderConfiguration(string serviceName, string downstreamHost,
|
||||||
int downstreamPort, bool useServiceDiscovery, string serviceDiscoveryProvider, string serviceProviderHost, int serviceProviderPort)
|
int downstreamPort, bool useServiceDiscovery, string serviceDiscoveryProvider, string serviceProviderHost, int serviceProviderPort)
|
||||||
{
|
{
|
||||||
ServiceName = serviceName;
|
ServiceName = serviceName;
|
||||||
|
@ -64,6 +64,7 @@ namespace Ocelot.DependencyInjection
|
|||||||
services.AddSingleton<IAuthenticationOptionsCreator, AuthenticationOptionsCreator>();
|
services.AddSingleton<IAuthenticationOptionsCreator, AuthenticationOptionsCreator>();
|
||||||
services.AddSingleton<IUpstreamTemplatePatternCreator, UpstreamTemplatePatternCreator>();
|
services.AddSingleton<IUpstreamTemplatePatternCreator, UpstreamTemplatePatternCreator>();
|
||||||
services.AddSingleton<IRequestIdKeyCreator, RequestIdKeyCreator>();
|
services.AddSingleton<IRequestIdKeyCreator, RequestIdKeyCreator>();
|
||||||
|
services.AddSingleton<IServiceProviderConfigurationCreator,ServiceProviderConfigurationCreator>();
|
||||||
|
|
||||||
var identityServerConfiguration = IdentityServerConfigurationCreator.GetIdentityServerConfiguration();
|
var identityServerConfiguration = IdentityServerConfigurationCreator.GetIdentityServerConfiguration();
|
||||||
|
|
||||||
|
@ -5,6 +5,6 @@ namespace Ocelot.ServiceDiscovery
|
|||||||
{
|
{
|
||||||
public interface IServiceDiscoveryProviderFactory
|
public interface IServiceDiscoveryProviderFactory
|
||||||
{
|
{
|
||||||
IServiceDiscoveryProvider Get(ServiceProviderConfiguraion serviceConfig);
|
IServiceDiscoveryProvider Get(ServiceProviderConfiguration serviceConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,7 +6,7 @@ namespace Ocelot.ServiceDiscovery
|
|||||||
{
|
{
|
||||||
public class ServiceDiscoveryProviderFactory : IServiceDiscoveryProviderFactory
|
public class ServiceDiscoveryProviderFactory : IServiceDiscoveryProviderFactory
|
||||||
{
|
{
|
||||||
public IServiceDiscoveryProvider Get(ServiceProviderConfiguraion serviceConfig)
|
public IServiceDiscoveryProvider Get(ServiceProviderConfiguration serviceConfig)
|
||||||
{
|
{
|
||||||
if (serviceConfig.UseServiceDiscovery)
|
if (serviceConfig.UseServiceDiscovery)
|
||||||
{
|
{
|
||||||
|
@ -35,6 +35,7 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
private Mock<IAuthenticationOptionsCreator> _authOptionsCreator;
|
private Mock<IAuthenticationOptionsCreator> _authOptionsCreator;
|
||||||
private Mock<IUpstreamTemplatePatternCreator> _upstreamTemplatePatternCreator;
|
private Mock<IUpstreamTemplatePatternCreator> _upstreamTemplatePatternCreator;
|
||||||
private Mock<IRequestIdKeyCreator> _requestIdKeyCreator;
|
private Mock<IRequestIdKeyCreator> _requestIdKeyCreator;
|
||||||
|
private Mock<IServiceProviderConfigurationCreator> _serviceProviderConfigCreator;
|
||||||
|
|
||||||
public FileConfigurationCreatorTests()
|
public FileConfigurationCreatorTests()
|
||||||
{
|
{
|
||||||
@ -51,12 +52,14 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
_authOptionsCreator = new Mock<IAuthenticationOptionsCreator>();
|
_authOptionsCreator = new Mock<IAuthenticationOptionsCreator>();
|
||||||
_upstreamTemplatePatternCreator = new Mock<IUpstreamTemplatePatternCreator>();
|
_upstreamTemplatePatternCreator = new Mock<IUpstreamTemplatePatternCreator>();
|
||||||
_requestIdKeyCreator = new Mock<IRequestIdKeyCreator>();
|
_requestIdKeyCreator = new Mock<IRequestIdKeyCreator>();
|
||||||
|
_serviceProviderConfigCreator = new Mock<IServiceProviderConfigurationCreator>();
|
||||||
|
|
||||||
_ocelotConfigurationCreator = new FileOcelotConfigurationCreator(
|
_ocelotConfigurationCreator = new FileOcelotConfigurationCreator(
|
||||||
_fileConfig.Object, _validator.Object, _logger.Object,
|
_fileConfig.Object, _validator.Object, _logger.Object,
|
||||||
_loadBalancerFactory.Object, _loadBalancerHouse.Object,
|
_loadBalancerFactory.Object, _loadBalancerHouse.Object,
|
||||||
_qosProviderFactory.Object, _qosProviderHouse.Object, _claimsToThingCreator.Object,
|
_qosProviderFactory.Object, _qosProviderHouse.Object, _claimsToThingCreator.Object,
|
||||||
_authOptionsCreator.Object, _upstreamTemplatePatternCreator.Object, _requestIdKeyCreator.Object);
|
_authOptionsCreator.Object, _upstreamTemplatePatternCreator.Object, _requestIdKeyCreator.Object,
|
||||||
|
_serviceProviderConfigCreator.Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@ -470,9 +473,25 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
result.ClaimsToHeaders.Count.ShouldBe(expected.ClaimsToHeaders.Count);
|
result.ClaimsToHeaders.Count.ShouldBe(expected.ClaimsToHeaders.Count);
|
||||||
result.ClaimsToQueries.Count.ShouldBe(expected.ClaimsToQueries.Count);
|
result.ClaimsToQueries.Count.ShouldBe(expected.ClaimsToQueries.Count);
|
||||||
result.RequestIdKey.ShouldBe(expected.RequestIdKey);
|
result.RequestIdKey.ShouldBe(expected.RequestIdKey);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ThenTheServiceConfigurationIs(ServiceProviderConfiguration expected)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _config.Data.ReRoutes.Count; i++)
|
||||||
|
{
|
||||||
|
var result = _config.Data.ReRoutes[i];
|
||||||
|
result.ServiceProviderConfiguraion.DownstreamHost.ShouldBe(expected.DownstreamHost);
|
||||||
|
result.ServiceProviderConfiguraion.DownstreamPort.ShouldBe(expected.DownstreamPort);
|
||||||
|
result.ServiceProviderConfiguraion.ServiceDiscoveryProvider.ShouldBe(expected.ServiceDiscoveryProvider);
|
||||||
|
result.ServiceProviderConfiguraion.ServiceName.ShouldBe(expected.ServiceName);
|
||||||
|
result.ServiceProviderConfiguraion.ServiceProviderHost.ShouldBe(expected.ServiceProviderHost);
|
||||||
|
result.ServiceProviderConfiguraion.ServiceProviderPort.ShouldBe(expected.ServiceProviderPort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void ThenTheAuthenticationOptionsAre(List<ReRoute> expectedReRoutes)
|
private void ThenTheAuthenticationOptionsAre(List<ReRoute> expectedReRoutes)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _config.Data.ReRoutes.Count; i++)
|
for (int i = 0; i < _config.Data.ReRoutes.Count; i++)
|
||||||
|
@ -90,14 +90,14 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
private void GivenTheServiceProviderFactoryReturns()
|
private void GivenTheServiceProviderFactoryReturns()
|
||||||
{
|
{
|
||||||
_serviceProviderFactory
|
_serviceProviderFactory
|
||||||
.Setup(x => x.Get(It.IsAny<ServiceProviderConfiguraion>()))
|
.Setup(x => x.Get(It.IsAny<ServiceProviderConfiguration>()))
|
||||||
.Returns(_serviceProvider.Object);
|
.Returns(_serviceProvider.Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ThenTheServiceProviderIsCalledCorrectly()
|
private void ThenTheServiceProviderIsCalledCorrectly()
|
||||||
{
|
{
|
||||||
_serviceProviderFactory
|
_serviceProviderFactory
|
||||||
.Verify(x => x.Get(It.IsAny<ServiceProviderConfiguraion>()), Times.Once);
|
.Verify(x => x.Get(It.IsAny<ServiceProviderConfiguration>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenAReRoute(ReRoute reRoute)
|
private void GivenAReRoute(ReRoute reRoute)
|
||||||
|
@ -9,7 +9,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
|
|||||||
{
|
{
|
||||||
public class ServiceProviderFactoryTests
|
public class ServiceProviderFactoryTests
|
||||||
{
|
{
|
||||||
private ServiceProviderConfiguraion _serviceConfig;
|
private ServiceProviderConfiguration _serviceConfig;
|
||||||
private IServiceDiscoveryProvider _result;
|
private IServiceDiscoveryProvider _result;
|
||||||
private readonly ServiceDiscoveryProviderFactory _factory;
|
private readonly ServiceDiscoveryProviderFactory _factory;
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
|
|||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenTheReRoute(ServiceProviderConfiguraion serviceConfig)
|
private void GivenTheReRoute(ServiceProviderConfiguration serviceConfig)
|
||||||
{
|
{
|
||||||
_serviceConfig = serviceConfig;
|
_serviceConfig = serviceConfig;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user