From ece89ebad07f522d102a258fe12d37c65c4bbac0 Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Thu, 4 Sep 2025 22:26:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20HttpClientFactory=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E4=BE=9D=E8=B5=96=E6=B3=A8=E5=85=A5=E7=9A=84=20IHttpC?= =?UTF-8?q?lientFactory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AiGateWay/HttpClientFactory.cs | 8 +++++++- .../Chats/AzureDatabricksChatCompletionsService.cs | 6 +++--- .../Chats/AzureOpenAiChatCompletionCompletionsService.cs | 6 +++--- .../Images/AzureOpenAIServiceImageService.cs | 4 ++-- .../ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs | 6 +++--- .../Embeddings/SiliconFlowTextEmbeddingService.cs | 4 ++-- .../YiFrameworkAiHubDomainModule.cs | 2 ++ 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs index 7048c436..5c6ea86e 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/HttpClientFactory.cs @@ -39,6 +39,12 @@ public static class HttpClientFactory private static readonly ConcurrentDictionary>> HttpClientPool = new(); + /// + /// 高并发下有问题 + /// + /// + /// + [Obsolete] public static HttpClient GetHttpClient(string key) { return HttpClientPool.GetOrAdd(key, k => new Lazy>(() => @@ -70,4 +76,4 @@ public static class HttpClientFactory return clients; })).Value[new Random().Next(0, PoolSize)]; } -} +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs index 6cd4fde1..f1382b38 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorAzureDatabricks/Chats/AzureDatabricksChatCompletionsService.cs @@ -10,7 +10,7 @@ using Yi.Framework.AiHub.Domain.Shared.Dtos.OpenAi; namespace Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorAzureDatabricks.Chats; -public class AzureDatabricksChatCompletionsService(ILogger logger) +public class AzureDatabricksChatCompletionsService(ILogger logger,IHttpClientFactory httpClientFactory) : IChatCompletionService { private string GetAddress(AiModelDescribe? options, string model) @@ -31,7 +31,7 @@ public class AzureDatabricksChatCompletionsService(ILogger logger) +public class AzureOpenAiChatCompletionCompletionsService(ILogger logger,IHttpClientFactory httpClientFactory) : IChatCompletionService { public async IAsyncEnumerable CompleteChatStreamAsync(AiModelDescribe options, @@ -21,7 +21,7 @@ public class AzureOpenAiChatCompletionCompletionsService(ILogger CreateImage(ImageCreateRequest imageCreate, AiModelDescribe? options = null, CancellationToken cancellationToken = default(CancellationToken)) @@ -98,7 +98,7 @@ public class AzureOpenAIServiceImageService : IImageService multipartContent.Add(new ByteArrayContent(imageEditCreateRequest.Image), "image", imageEditCreateRequest.ImageName); - return await HttpClientFactory.GetHttpClient(url).PostFileAndReadAsAsync( + return await httpClientFactory.CreateClient().PostFileAndReadAsAsync( url, multipartContent, cancellationToken); } diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs index cac5805e..dde9b819 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/AiGateWay/Impl/ThorDeepSeek/Chats/DeepSeekChatCompletionsService.cs @@ -9,7 +9,7 @@ using Yi.Framework.AiHub.Domain.Shared.Dtos.OpenAi; namespace Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorDeepSeek.Chats; -public sealed class DeepSeekChatCompletionsService(ILogger logger) +public sealed class DeepSeekChatCompletionsService(ILogger logger,IHttpClientFactory httpClientFactory) : IChatCompletionService { public async IAsyncEnumerable CompleteChatStreamAsync(AiModelDescribe options, @@ -24,7 +24,7 @@ public sealed class DeepSeekChatCompletionsService(ILogger EmbeddingAsync( @@ -12,7 +12,7 @@ public sealed class SiliconFlowTextEmbeddingService AiModelDescribe? options = null, CancellationToken cancellationToken = default) { - var response = await HttpClientFactory.GetHttpClient(options.Endpoint).PostJsonAsync( + var response = await httpClientFactory.CreateClient().PostJsonAsync( options?.Endpoint.TrimEnd('/') + "/v1/embeddings", createEmbeddingModel, options!.ApiKey); diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs index b04c2d0f..30f155ba 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs @@ -83,6 +83,8 @@ namespace Yi.Framework.AiHub.Domain //配置服务号 Configure(configuration.GetSection("Fuwuhao")); + + services.AddHttpClient(); } public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)