mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-05 00:10:49 +08:00 
			
		
		
		
	refactor: Refactor HttpClientHttpRequester Httpclient queue
This commit is contained in:
		@@ -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;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user