feat: 升级流程增强 + 网关化配置 + 重连循环化

- 配置化:gateway.url/socket.path/download.prefix(网关基础地址统一推导 ws 与下载地址)、
  main.home 主目录(jar/pid 相对它推导)、order.basic;properties 中文 \uXXXX 转义自动还原
- 升级流程:下载 PK 魔数检查与诊断日志;SHA 校验;替换改「改名腾位」绕开 Windows 文件锁延迟;
  nssm stop/start 驱动停止与拉起(pid 强杀回退);升级中标志暂停看门狗拉起避免抢占 jar 锁
- ws_client:重连改循环实现修复递归栈溢出(长时间断线后 maximum recursion depth);
  退避封顶延长至 5 分钟;心跳线程独立修复「暂无心跳数据」
- 新增命令:GET_APIS/HTTP_PROXY(接口测试代理,纯透传鉴权)、GET_LOG_DOWNLOAD(日志下载备用)
- 诊断增强:taskkill/进程退出/替换重试逐次日志

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-09-03 16:52:34 +08:00
co-authored by Claude
parent b572697e17
commit 0b13de14eb
7 changed files with 366 additions and 152 deletions
+35 -20
View File
@@ -4,19 +4,33 @@
# > \u672C\u6587\u4EF6 > \u4EE3\u7801\u5185\u7F6E\u9ED8\u8BA4\u503C
# \u670D\u52A1\u811A\u672C\u81EA\u52A8\u52A0\u8F7D conf/.env \u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF\uFF1BNSSM \u7528 AppEnvironmentExtra \u8BBE\u7F6E
# ============================================================
# B \u7AEF\u7F51\u5173\u57FA\u7840\u5730\u5740\uFF08\u914D\u7F6E\u540E\uFF1AWS \u8FDE\u63A5\u5730\u5740 = \u7F51\u5173\u5730\u5740\uFF08http\u2192ws\uFF09+ socket.path + \u8BBE\u5907\u53F7\uFF1B
# \u5347\u7EA7\u4E0B\u8F7D\u5730\u5740 = \u7F51\u5173\u5730\u5740 + B \u7AEF\u4E0B\u53D1\u7684\u76F8\u5BF9\u8DEF\u5F84\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_GATEWAY_URL
gateway.url=http://10.10.10.228:19901
# WebSocket \u8DEF\u7531\u76F8\u5BF9\u8DEF\u5F84\uFF08\u914D\u5408 gateway.url \u4F7F\u7528\uFF0C\u9ED8\u8BA4 /medical/agentSocket/\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_SOCKET_PATH
socket.path=/medical/agentSocket/
# \u7F51\u5173\u6587\u4EF6\u4E0B\u8F7D\u8DEF\u7531\u524D\u7F00\uFF08\u5347\u7EA7\u5305\u4E0B\u8F7D\u5730\u5740 = gateway.url + \u6B64\u524D\u7F00 + B \u7AEF\u4E0B\u53D1\u7684\u6587\u4EF6\u8DEF\u5F84\uFF0C
# \u5982 http://10.10.10.228:19901/file/down/hf-upgrade/20260902/xxx.jar\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_DOWNLOAD_PREFIX
download.prefix=/file/down
# B \u7AEF\u7BA1\u7406\u670D\u52A1\u5668 WebSocket \u901A\u9053\u57FA\u5730\u5740\uFF08\u7ECF\u7F51\u5173\u8F6C\u53D1\uFF0C\u987B\u5E26 /medical \u670D\u52A1\u524D\u7F00\uFF0C\u4EE5 /agentSocket/ \u7ED3\u5C3E\uFF09
# \u6CE8\u610F\uFF1A\u8BBE\u5907\u53F7\u4E0D\u5199\u5728\u8FD9\u91CC\uFF0C\u8FDE\u63A5\u65F6\u81EA\u52A8\u62FC\u63A5 device.id
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_SERVER_URL
server.url=ws://10.10.10.228:19901/medical/agentSocket/
# \u53EF\u4E0D\u914D\u7F6E\uFF0C\u6709\u4E0A\u9762\u7684\u62FC\u63A5
# server.url=ws://10.10.10.228:19901/medical/agentSocket/
# \u8BBE\u5907\u7F16\u53F7\uFF08\u533B\u9662\u552F\u4E00\uFF0C\u5982 jinghe-01\uFF0C\u9700\u5148\u5728 B \u7AEF\u6CE8\u518C\uFF0C\u5426\u5219\u8FDE\u63A5\u4F1A\u88AB\u62D2\u7EDD\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_DEVICE_ID
device.id=jinghe-01
device.id=xinglongyuan-01
# \u8BBE\u5907\u9274\u6743 Token\uFF08B \u7AEF\u6CE8\u518C\u8BBE\u5907\u65F6\u4E0B\u53D1\uFF0C\u4E3A\u7A7A\u5219\u4E0D\u643A\u5E26\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_DEVICE_TOKEN
device.token=dccbd1eca07511f181d5a0369fe0bc61
device.token=bccbd1eca0232343423a0369fe0bc61
# \u4E3B\u7A0B\u5E8F\u5065\u5EB7\u68C0\u67E5\u5730\u5740\uFF08\u770B\u95E8\u72D7\u6309\u6B64\u5730\u5740\u63A2\u6D4B\u4E3B\u7A0B\u5E8F\u662F\u5426\u5B58\u6D3B\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_MAIN_HEALTH_URL
@@ -24,31 +38,32 @@ main.health.url=http://127.0.0.1:8082/api/admin/health
# \u4E3B\u7A0B\u5E8F\u7BA1\u7406\u63A5\u53E3 Token\uFF08\u987B\u4E0E\u4E3B\u7A0B\u5E8F\u914D\u7F6E\u4E2D\u7684 admin.token \u4E00\u81F4\uFF0C\u73AF\u56DE\u8C03\u7528 /api/admin \u65F6\u9274\u6743\u7528\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_MAIN_ADMIN_TOKEN
main.admin.token=
main.admin.token=a0232343423a0369fe0bc61
main.home=C:/Users/lianl/Desktop/\u524D\u7F6E\u673A\u6D4B\u8BD5/main
# \u4E3B\u7A0B\u5E8F jar \u8DEF\u5F84\uFF08\u76F8\u5BF9 Agent \u5DE5\u4F5C\u76EE\u5F55\uFF1B\u5347\u7EA7\u65F6\u5907\u4EFD/\u66FF\u6362/\u56DE\u6EDA\u90FD\u7528\u6B64\u8DEF\u5F84\u3002
# jar \u4EA7\u7269\u540D\u5DF2\u7EDF\u4E00\u4E0D\u5E26\u7248\u672C\u53F7\uFF08hospital-front.jar\uFF09\uFF0C\u6587\u4EF6\u540D\u8DE8\u7248\u672C\u4E0D\u53D8\uFF0C\u6B64\u914D\u7F6E\u4E00\u6B21\u914D\u597D\u65E0\u9700\u968F\u7248\u672C\u8C03\u6574\uFF1B
# \u5206\u76EE\u5F55\u90E8\u7F72\u65F6\u6307\u5411\u4E3B\u7A0B\u5E8F\u76EE\u5F55\uFF0C\u5982 ../main/hospital-front.jar\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_MAIN_JAR_PATH
main.jar.path=hospital-front.jar
# \u4E3B\u7A0B\u5E8F PID \u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9 Agent \u5DE5\u4F5C\u76EE\u5F55\uFF0C\u987B\u6307\u5411\u4E3B\u7A0B\u5E8F\u5B9E\u9645\u5199\u5165\u7684 pid \u6587\u4EF6\uFF0C
# \u5347\u7EA7\u505C\u6B62\u4E3B\u7A0B\u5E8F\u65F6\u7528\u4E8E\u515C\u5E95\u5F3A\u6740\uFF1B\u5206\u76EE\u5F55\u90E8\u7F72\u65F6\u5982 ../main/pid/hospital-front.pid\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_MAIN_PID_FILE
main.pid.file=pid/hospital-front.pid
# \u4E3B\u7A0B\u5E8F\u542F\u52A8\u547D\u4EE4\uFF08\u770B\u95E8\u72D7\u68C0\u6D4B\u5230\u4E3B\u7A0B\u5E8F\u5B95\u673A\u540E\u6267\u884C\u6B64\u547D\u4EE4\u62C9\u8D77\uFF09
# \u6CE8\u610F\uFF1A\u82E5\u914D\u7F6E\u4E86 main.service.name\uFF0C\u5219\u4F18\u5148\u7528 NSSM \u91CD\u542F\u670D\u52A1\uFF0C\u672C\u9879\u4E0D\u751F\u6548
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_MAIN_START_CMD
main.start.cmd=bin/service.bat main start
# \u53EF\u4E0D\u914D\u7F6E
# main.start.cmd=bin/service.bat main start
# NSSM \u53EF\u6267\u884C\u6587\u4EF6\u5B8C\u6574\u8DEF\u5F84\uFF08\u914D\u7F6E main.service.name \u65F6\u5FC5\u586B\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_NSSM_PATH
nssm.path=D:\tools\nssm-2.24\win64\nssm.exe
nssm.path=D:/tools/nssm-2.24/win64/nssm.exe
# \u4E3B\u7A0B\u5E8F\u6CE8\u518C\u7684 Windows \u670D\u52A1\u540D\uFF08\u914D\u7F6E\u540E\u770B\u95E8\u72D7\u901A\u8FC7 nssm restart <\u670D\u52A1\u540D> \u62C9\u8D77\u4E3B\u7A0B\u5E8F\uFF09
# \u7559\u7A7A\u5219\u56DE\u9000\u4F7F\u7528 main.start.cmd
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_MAIN_SERVICE_NAME
main.service.name=HospitalFront
# \u5FC3\u8DF3\u95F4\u9694\uFF0C\u5355\u4F4D\u79D2\uFF08\u9ED8\u8BA4 15\uFF0C\u987B\u5C0F\u4E8E\u7F51\u5173\u7A7A\u95F2\u8D85\u65F6\uFF0C\u5426\u5219\u8FDE\u63A5\u4F1A\u88AB\u7F51\u5173\u65AD\u5F00\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_HEARTBEAT_SEC
heartbeat.sec=15
# \u662F\u5426\u542F\u7528\u770B\u95E8\u72D7\u5B88\u62A4\u4E3B\u7A0B\u5E8F\uFF08true/false\uFF0C\u9ED8\u8BA4 true\uFF1Bfalse \u65F6\u4EC5\u505A\u8FD0\u7EF4\u547D\u4EE4\u901A\u9053\uFF09
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_GUARD_ENABLE
guard.enable=true
# \u65E5\u5FD7\u76EE\u5F55\uFF08\u76F8\u5BF9\u90E8\u7F72\u6839\u76EE\u5F55\uFF0C\u9ED8\u8BA4 logs\uFF1B\u6587\u4EF6 agent.log\uFF0C\u5355\u6587\u4EF6 5MB \u8F6E\u8F6C\u3001\u4FDD\u7559 5 \u4E2A\u5907\u4EFD\uFF09
# \u670D\u52A1\u65B9\u5F0F\u8FD0\u884C\u65F6\u63A7\u5236\u53F0\u65E5\u5FD7\u4E0D\u53EF\u89C1\uFF0C\u8BF7\u4F9D\u8D56\u6B64\u6587\u4EF6\u65E5\u5FD7
# \u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF1AAGENT_LOG_DIR
log.dir=logs
main.service.name=HospitalFront3