From d7a672cdf4bddbea14b32c7291d92d3687174075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A3=AE2003?= <2384017988@qq.com> Date: Sun, 18 Oct 2026 17:40:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=20UserHost/CustomerHost/ChessGameHost?= =?UTF-8?q?/FishRoomHost=20=E8=A1=A5=E5=9B=9E=20swagger=EF=BC=9B=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=9B=BF=E6=8D=A2=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E7=BD=91=E5=85=B3=E5=81=A5=E5=BA=B7=E6=A3=80?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChessGameHost/ChessGameHost.csproj | 3 ++- ChessGameHost/Program.cs | 26 ++++++++++++++++++++ CustomerSrc/CustomerHost/CustomerHost.csproj | 3 ++- CustomerSrc/CustomerHost/Program.cs | 26 ++++++++++++++++++++ FishGameSrc/FishRoomHost/FishRoomHost.csproj | 3 ++- FishGameSrc/FishRoomHost/Program.cs | 26 ++++++++++++++++++++ UserSrc/UserHost/Program.cs | 26 ++++++++++++++++++++ UserSrc/UserHost/UserHost.csproj | 3 ++- deploy/server/0524-replace.sh | 9 +++++-- 9 files changed, 119 insertions(+), 6 deletions(-) diff --git a/ChessGameHost/ChessGameHost.csproj b/ChessGameHost/ChessGameHost.csproj index d567f74..61086d9 100644 --- a/ChessGameHost/ChessGameHost.csproj +++ b/ChessGameHost/ChessGameHost.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -16,6 +16,7 @@ + diff --git a/ChessGameHost/Program.cs b/ChessGameHost/Program.cs index 482bf0d..d93903b 100644 --- a/ChessGameHost/Program.cs +++ b/ChessGameHost/Program.cs @@ -85,6 +85,23 @@ builder.Services.AddSingleton(); builder.Services.AddAutoMapper(typeof(AutoMapperConfig)); builder.Services.AddHostedService(); +#region Swagger +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo + { + Title = "ChessGameHost", + Description = "象棋Socket接口", + Version = "v1" + }); + foreach (var xml in System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.xml")) + { + try { c.IncludeXmlComments(xml, true); } catch { } + } +}); +#endregion + builder.Services.AddHostedService(); builder.Services.AddHealthChecks() @@ -190,6 +207,15 @@ if (app.Environment.IsDevelopment()) { } +#region Swagger +app.UseSwagger(c => c.RouteTemplate = "swagger/{documentName}/swagger.json"); +app.UseSwaggerUI(c => +{ + c.RoutePrefix = "swagger"; + c.SwaggerEndpoint("v1/swagger.json", "ChessGameHost v1"); +}); +#endregion + app.UseApiLogging(); app.UseRouting(); app.UseGlobalExceptionHandler(); diff --git a/CustomerSrc/CustomerHost/CustomerHost.csproj b/CustomerSrc/CustomerHost/CustomerHost.csproj index 9cbbe8e..bd3e17f 100644 --- a/CustomerSrc/CustomerHost/CustomerHost.csproj +++ b/CustomerSrc/CustomerHost/CustomerHost.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -17,6 +17,7 @@ + diff --git a/CustomerSrc/CustomerHost/Program.cs b/CustomerSrc/CustomerHost/Program.cs index 99ec6cc..8f7b17a 100644 --- a/CustomerSrc/CustomerHost/Program.cs +++ b/CustomerSrc/CustomerHost/Program.cs @@ -105,6 +105,23 @@ builder.Services.AddCap(builder.Configuration); // ============================================ // ============================================ +#region Swagger +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo + { + Title = "CustomerApi", + Description = "客服服务 API 文档", + Version = "v1" + }); + foreach (var xml in System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.xml")) + { + try { c.IncludeXmlComments(xml, true); } catch { } + } +}); +#endregion + builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer(builder => { @@ -122,6 +139,15 @@ if (app.Environment.IsDevelopment()) app.UseDeveloperExceptionPage(); } +#region Swagger +app.UseSwagger(c => c.RouteTemplate = "customerswagger/{documentName}/swagger.json"); +app.UseSwaggerUI(c => +{ + c.RoutePrefix = "customerswagger"; + c.SwaggerEndpoint("v1/swagger.json", "CustomerApi v1"); +}); +#endregion + app.UseCors("Cors"); var uploadPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads"); diff --git a/FishGameSrc/FishRoomHost/FishRoomHost.csproj b/FishGameSrc/FishRoomHost/FishRoomHost.csproj index c03b468..ffb4d4e 100644 --- a/FishGameSrc/FishRoomHost/FishRoomHost.csproj +++ b/FishGameSrc/FishRoomHost/FishRoomHost.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -18,6 +18,7 @@ + diff --git a/FishGameSrc/FishRoomHost/Program.cs b/FishGameSrc/FishRoomHost/Program.cs index 7e91425..2ac9689 100644 --- a/FishGameSrc/FishRoomHost/Program.cs +++ b/FishGameSrc/FishRoomHost/Program.cs @@ -83,6 +83,23 @@ builder.Services.AddSignalR(hubOptions => }) .AddJsonProtocol(); +#region Swagger +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo + { + Title = "FishRoomHost", + Description = "捕鱼房间接口", + Version = "v1" + }); + foreach (var xml in System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.xml")) + { + try { c.IncludeXmlComments(xml, true); } catch { } + } +}); +#endregion + builder.Services.Configure(x => { x.MultipartBodyLengthLimit = 1024 * 1024 * 16; @@ -154,6 +171,15 @@ if (app.Environment.IsDevelopment()) { } +#region Swagger +app.UseSwagger(c => c.RouteTemplate = "swagger/{documentName}/swagger.json"); +app.UseSwaggerUI(c => +{ + c.RoutePrefix = "swagger"; + c.SwaggerEndpoint("v1/swagger.json", "FishRoomHost v1"); +}); +#endregion + app.UseApiLogging(); app.UseRouting(); app.UseGlobalExceptionHandler(); diff --git a/UserSrc/UserHost/Program.cs b/UserSrc/UserHost/Program.cs index eb5441f..63bd204 100644 --- a/UserSrc/UserHost/Program.cs +++ b/UserSrc/UserHost/Program.cs @@ -113,6 +113,23 @@ builder.Services.AddCronJob(c => }); // Autofac +#region Swagger +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo + { + Title = "UserApi", + Description = "游戏大厅接口管理", + Version = "v1" + }); + foreach (var xml in System.IO.Directory.GetFiles(AppContext.BaseDirectory, "*.xml")) + { + try { c.IncludeXmlComments(xml, true); } catch { } + } +}); +#endregion + builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer(builder => { @@ -128,6 +145,15 @@ if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } +#region Swagger +app.UseSwagger(c => c.RouteTemplate = "swagger/{documentName}/swagger.json"); +app.UseSwaggerUI(c => +{ + c.RoutePrefix = "swagger"; + c.SwaggerEndpoint("v1/swagger.json", "UserApi v1"); +}); +#endregion + app.UseCors("Cors"); app.UseRouting(); app.MapHub("/loginhub", options => diff --git a/UserSrc/UserHost/UserHost.csproj b/UserSrc/UserHost/UserHost.csproj index f162074..e11f716 100644 --- a/UserSrc/UserHost/UserHost.csproj +++ b/UserSrc/UserHost/UserHost.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -17,6 +17,7 @@ + diff --git a/deploy/server/0524-replace.sh b/deploy/server/0524-replace.sh index 0cb21a1..d6d1ed0 100644 --- a/deploy/server/0524-replace.sh +++ b/deploy/server/0524-replace.sh @@ -86,10 +86,15 @@ run_container() { } health() { - local hp; hp=$(host_port "$1") + local svc=$1 hp; hp=$(host_port "$svc") for _ in $(seq 1 15); do local c; c=$(curl -s -o /dev/null -w '%{http_code}' "http://127.0.0.1:$hp/health") - [ "$c" = "200" ] && return 0 + if [ "$svc" = "gateway" ]; then + # 网关的 /health 被 Ocelot 接管,会返回 404;只要端口有 HTTP 响应即视为存活 + [ "$c" != "000" ] && return 0 + else + [ "$c" = "200" ] && return 0 + fi sleep 2 done return 1