From a59e5d99a77fcb152e6fe49df78f69cb5fd6c5a0 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 19 八月 2025 15:58:10 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 49 insertions(+), 8 deletions(-) diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs index db7a2db..40da33e 100644 --- a/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs +++ b/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs @@ -1,11 +1,14 @@ -锘縰sing Consul; +锘縰sing Azure; +using Consul; using Furion; using Furion.FriendlyException; using Furion.HttpRemote; using Microsoft.Extensions.Caching.Distributed; using System; using System.Collections.Generic; +using System.ComponentModel.Design; using System.Linq; +using System.Net.Http; using System.Text; using System.Threading.Tasks; @@ -44,8 +47,8 @@ var jsonResourceModels = await distributedCache.GetStringAsync($"ResourceModel|{requestTypeFullName}"); var resource = jsonResourceModels.JsonTo<ResourceModel>(); - var domain = await GetHealthyServiceDomain(resource); - var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), $"{domain}{resource.Route}"); + var url = await GetUrl(resource.ServiceName, resource.Route); + var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), url); if (resource.Method == EnumResourceMethod.Get) builder = builder.WithQueryParameters(request); else @@ -56,22 +59,60 @@ return response; } + public async Task<string> SendHttpAsync(Resource resource, string request, IResourceHttpProvider provider = null) + { + var url = await GetUrl(resource.ServiceName, resource.Route); + var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), url); + if (resource.Method == EnumResourceMethod.Get) + builder = builder.WithQueryParameters(request); + else + builder = builder.SetJsonContent(request); + provider = provider ?? new DefaultResourceHttpProvider(); + builder = provider.AddAuthentication(builder); + var response = await provider.SendAsStringAsync(httpRemoteService, builder); + return response; + } + + public async Task<string> SendHttpAsync(EnumResourceService service, HttpMethod method, string route, string request, IResourceHttpProvider provider = null) + { + var serviceName = service.GetCustomAttribute<EnumResourceService, ResourceServiceAttribute>().ServiceName; + var url = await GetUrl(serviceName, route); + var builder = HttpRequestBuilder.Create(method, url); + if (method == HttpMethod.Get) + builder = builder.WithQueryParameters(request); + else + builder = builder.SetJsonContent(request); + provider = provider ?? new DefaultResourceHttpProvider(); + builder = provider.AddAuthentication(builder); + var response = await provider.SendAsStringAsync(httpRemoteService, builder); + return response; + } + + public async Task<string> GetUrl(string serviceName, string route) + { + var domain = await GetHealthyServiceDomain(serviceName); + return $"{domain}{route}"; + } + /// <summary> /// 鑾峰彇鍋ュ悍鏈嶅姟鍩熷悕 /// </summary> - /// <param name="resource"></param> + /// <param name="serviceName"></param> /// <returns></returns> - public async Task<string> GetHealthyServiceDomain(ResourceModel resource) + public async Task<string> GetHealthyServiceDomain(string serviceName) { - var queryResult = await consulClient.Health.Service(resource.ServiceName, null, true); + var env = App.GetConfig<string>("Environment"); + serviceName = $"{env}_{serviceName}"; + + var queryResult = await consulClient.Health.Service(serviceName, null, true); if (queryResult.StatusCode != System.Net.HttpStatusCode.OK) - throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔resource.Service}"); + throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔serviceName}"); var domains = queryResult.Response .Select(s => $"http://{s.Service.Address}:{s.Service.Port}") .ToList(); if (domains.IsNull()) - throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔resource.Service}"); + throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔serviceName}"); // 杞閫夋嫨瀹炰緥 int randomIndex = new Random().Next(domains.Count); return domains[randomIndex]; -- Gitblit v1.9.1