# 验证与限制
本页列出 DynamicApp 文档和代码变更后的常用验证命令,以及运行边界。
# 文档站点验证
cd .\doc
npm run build
配置文件语法检查:
node -e "require('./doc/docs/.vuepress/config.js'); console.log('config ok')"
# 代码构建
dotnet build .\air.net.cloud.sln -m:1 /nr:false
如果 Windows 下遇到 AspectInjector 或 DLL 文件锁,优先使用 -m:1 /nr:false 串行执行。
# 运行验证
查询运行目标:
curl http://127.0.0.1:5110/dynamicapp-manager/targets \
-H 'X-DynamicApp-Manager-Ticket: <ticket>'
验证 Gateway 路由:
curl http://127.0.0.1:5110/mods/system/Health
验证面板入口:
http://127.0.0.1:5110/dynamicapp-panel
# 稳定性测试
Process 模式上线后建议至少覆盖以下破坏性场景:
| 场景 | 操作 | 预期 |
|---|---|---|
| 误杀子进程 | pkill -f '/app/mods/account/air.cloud.account.entry.dll' | 自愈服务自动重启目标,最终恢复 Active/Healthy |
| 子进程停止后路由恢复 | 误杀后持续访问 /mods/account/Health | 短暂失败后恢复 200 Healthy |
| Host 容器停止 | docker stop air.dynamicapp && docker start air.dynamicapp | Compose/容器恢复 Host,启动恢复服务重新拉起 Active 的 Process 目标 |
| Host 容器重建 | docker compose up -d --force-recreate air-dynamicapp | 保留 data 和 mods 后,Process 目标恢复 |
| 坏包或入口缺失 | 临时移动某个 Artifact.File 后启动 | 状态保持 Failed/Unhealthy,达到重试上限后不无限重启 |
| 健康端口异常 | 临时占用或关闭 Mod 监听端口 | 健康探测失败,状态进入 Failed/Unhealthy,端口恢复后可自愈 |
| 人工停止目标 | 调用 /dynamicapp-manager/stop | 状态为 Stopped/Stopped,自愈服务不会自动拉起 |
远端验证时先从配置读取 Manager Ticket,不要把 Ticket 打印到日志:
python3 - <<'PY' >/tmp/dyn_ticket
import json
from pathlib import Path
data=json.loads(Path('/opt/docker/air/dynamicapp/appsettings.json').read_text(encoding='utf-8-sig'))
print((data.get('DynamicApp',{}).get('ManagerApi',{}).get('Tickets') or [''])[0])
PY
ticket=$(cat /tmp/dyn_ticket)
查询自愈后的状态:
curl -sS -H "X-DynamicApp-Manager-Ticket: $ticket" \
http://127.0.0.1:5110/dynamicapp-manager/applications
# 限制
DynamicApp 不提供以下能力:
- 分布式一致性状态存储。
- 完整 Kubernetes 工作负载管理。
- Service Mesh。
- 跨 DynamicApp 分布式事务。
- WebSocket 代理。
如果需要这些能力,应在 DynamicApp 运行时外部接入专用基础设施,或补充明确的适配器边界。