mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:22:50 +08:00
refactor: Refactor HttpClientHttpRequester Httpclient queue
This commit is contained in:
parent
0b09644d7e
commit
4d8da86950
@ -22,7 +22,9 @@ namespace Ocelot.Requester
|
|||||||
|
|
||||||
public async Task<Response<HttpResponseMessage>> GetResponse(Request.Request request)
|
public async Task<Response<HttpResponseMessage>> GetResponse(Request.Request request)
|
||||||
{
|
{
|
||||||
IHttpClient httpClient = GetHttpClient(request);
|
var cacheKey = GetCacheKey(request);
|
||||||
|
|
||||||
|
IHttpClient httpClient = GetHttpClient(cacheKey);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var response = await httpClient.SendAsync(request.HttpRequestMessage);
|
var response = await httpClient.SendAsync(request.HttpRequestMessage);
|
||||||
@ -42,32 +44,28 @@ namespace Ocelot.Requester
|
|||||||
{
|
{
|
||||||
return new ErrorResponse<HttpResponseMessage>(new UnableToCompleteRequestError(exception));
|
return new ErrorResponse<HttpResponseMessage>(new UnableToCompleteRequestError(exception));
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_cacheHandlers.Set(cacheKey, httpClient, TimeSpan.FromHours(24));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IHttpClient GetHttpClient(Request.Request request)
|
private IHttpClient GetHttpClient(string cacheKey)
|
||||||
{
|
{
|
||||||
var builder = new HttpClientBuilder();
|
var builder = new HttpClientBuilder();
|
||||||
var cacheKey = GetCacheKey(request, builder);
|
|
||||||
var httpClient = _cacheHandlers.Get(cacheKey);
|
var httpClient = _cacheHandlers.Get(cacheKey);
|
||||||
if (httpClient == null)
|
if (httpClient == null)
|
||||||
{
|
{
|
||||||
httpClient = builder.Create();
|
httpClient = builder.Create();
|
||||||
}
|
}
|
||||||
_cacheHandlers.Set(cacheKey, httpClient, TimeSpan.FromHours(6));
|
|
||||||
return httpClient;
|
return httpClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetCacheKey(Request.Request request, IHttpClientBuilder builder)
|
private string GetCacheKey(Request.Request request)
|
||||||
{
|
{
|
||||||
string baseUrl = $"{request.HttpRequestMessage.RequestUri.Scheme}://{request.HttpRequestMessage.RequestUri.Authority}";
|
string baseUrl = $"{request.HttpRequestMessage.RequestUri.Scheme}://{request.HttpRequestMessage.RequestUri.Authority}";
|
||||||
|
|
||||||
if (request.IsQos)
|
|
||||||
{
|
|
||||||
builder.WithQos(request.QosProvider, _logger);
|
|
||||||
baseUrl = $"{baseUrl}{request.QosProvider.CircuitBreaker.CircuitBreakerPolicy.PolicyKey}";
|
|
||||||
}
|
|
||||||
|
|
||||||
return baseUrl;
|
return baseUrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user