QAUP_Management/adxp-adapter/QUICKSTART.md

439 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADXP SDK Adapter 快速开始
## 方案概述
ADXP SDK (adxp-client-2.6.9.jar) 基于 JDK 8 开发,无法在 Java 11+ 环境运行。本方案通过独立的适配器服务解决兼容性问题。
### 架构
```
主应用 (Java 17) → HTTP → ADXP Adapter (Java 8, Docker) → SOAP → 数据中台
└─ port 8080 └─ port 8086 └─ port 7001
```
### Apple Silicon (M1/M2/M3) 用户
**推荐使用 Docker**,无需安装 Java 8Homebrew 的 openjdk@8 只有 x86_64 版本)
---
## 🚀 快速开始Docker 方式,推荐)
### 步骤 1: 启动 Mock 服务器(模拟数据中台)
```bash
# 在项目根目录
cd tools
python3 mock_adxp.py --host 0.0.0.0 --port 7001 --auto --interval 10
```
**说明**: Mock 服务器监听 `0.0.0.0:7001`,每 10 秒自动生成航班消息
### 步骤 2: 编译适配器服务
```bash
cd ../adxp-adapter
mvn clean package -DskipTests
```
**预期输出**: `BUILD SUCCESS`,生成 `target/adxp-adapter.jar`
### 步骤 3: 构建 Docker 镜像
```bash
docker build -t adxp-adapter:1.0.0 .
```
**说明**: 使用 OpenJDK 8非 Alpine包含 `net-tools`SDK 需要 `ifconfig` 命令)
### 步骤 4: 启动 Docker 容器
```bash
docker run -d \
-p 8086:8086 \
-e ADXP_HOST=host.docker.internal \
-e ADXP_PORT=7001 \
--name adxp-adapter \
adxp-adapter:1.0.0
```
**说明**:
- `host.docker.internal` 指向宿主机(访问本地 mock 服务器)
- 环境变量可覆盖配置文件
### 步骤 5: 验证适配器服务
```bash
# 健康检查
curl http://localhost:8086/api/adxp/health
# 预期输出: {"activeSessions":0,"status":"UP"}
```
### 步骤 6: 测试完整流程
```bash
# 1. 登录
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8086/api/adxp/login \
-H "Content-Type: application/json" \
-d '{"username":"dianxin","password":"dianxin@123"}')
echo "登录响应: $LOGIN_RESPONSE"
# 预期: {"success":true,"sessionId":"xxx-xxx-xxx","message":"登录成功"}
# 2. 提取 SessionId
SESSION_ID=$(echo "$LOGIN_RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin)['sessionId'])")
echo "SessionId: $SESSION_ID"
# 3. 接收消息
curl -s "http://localhost:8086/api/adxp/messages?sessionId=$SESSION_ID" | python3 -m json.tool
# 4. 退出登录
curl -s -X POST http://localhost:8086/api/adxp/logout \
-H "Content-Type: application/json" \
-d "{\"sessionId\":\"$SESSION_ID\"}" | python3 -m json.tool
# 预期: {"success":true,"message":"登出成功"}
```
### 步骤 7: 启动主应用
```bash
cd ../qaup-admin
mvn spring-boot:run -Dspring-boot.run.profiles=dev,druid
```
**主应用会自动通过 HTTP 调用适配器服务!**
---
## 📋 Docker 常用命令
```bash
# 查看日志
docker logs -f adxp-adapter
# 重启容器
docker restart adxp-adapter
# 停止并删除容器
docker stop adxp-adapter && docker rm adxp-adapter
# 重新构建镜像(代码修改后)
cd adxp-adapter
mvn clean package -DskipTests
docker stop adxp-adapter && docker rm adxp-adapter
docker build -t adxp-adapter:1.0.0 .
docker run -d -p 8086:8086 -e ADXP_HOST=host.docker.internal -e ADXP_PORT=7001 --name adxp-adapter adxp-adapter:1.0.0
```
---
## 🛠️ 本地运行(需要 Java 8
**仅适用于 x86_64 机器或已安装 Java 8 的环境**
### 步骤 1: 启动 Mock 服务器
```bash
cd tools
python3 mock_adxp.py --host 0.0.0.0 --port 7001 --auto --interval 10
```
### 步骤 2: 编译
```bash
cd ../adxp-adapter
mvn clean package -DskipTests
```
### 步骤 3: 启动适配器
```bash
# 如果系统默认是 Java 8
java -jar target/adxp-adapter.jar
# 或指定 Java 8 路径
/path/to/jdk8/bin/java -jar target/adxp-adapter.jar
# 或使用启动脚本(自动查找 Java 8
./start.sh
```
### 步骤 4: 测试
同 Docker 方式的步骤 6
## 配置说明
### 主应用配置 (application-dev.yml)
```yaml
data:
collector:
adxp-adapter:
host: localhost # 适配器服务地址
port: 8086 # 适配器服务端口
username: dianxin
password: dianxin@123
reconnect-delay-millis: 3000
```
### 适配器服务配置 (application.yml)
```yaml
adxp:
host: localhost # 真实数据中台地址(或 mock 服务器)
port: 7001 # 数据中台端口
```
---
## 🐳 Docker Compose 部署(生产环境)
### 1. 准备环境变量
```bash
# 创建 .env 文件
cat > .env << EOF
ADXP_HOST=10.10.10.100 # 真实数据中台 IP
ADXP_PORT=7001 # 真实数据中台端口
EOF
```
### 2. 编译和构建
```bash
cd adxp-adapter
mvn clean package -DskipTests
docker build -t adxp-adapter:1.0.0 .
```
### 3. 启动服务
```bash
# 使用 Docker Compose
docker-compose up -d
# 查看日志
docker-compose logs -f adxp-adapter
# 查看状态
docker-compose ps
```
### 4. 验证部署
```bash
# 健康检查
curl http://localhost:8086/api/adxp/health
# 测试登录
curl -X POST http://localhost:8086/api/adxp/login \
-H "Content-Type: application/json" \
-d '{"username":"dianxin","password":"dianxin@123"}'
```
### 5. 停止服务
```bash
docker-compose down
```
---
## 🔧 环境切换
### 开发环境(使用 Mock
**主应用配置** (`qaup-admin/src/main/resources/application-dev.yml`):
```yaml
data:
collector:
adxp-adapter:
host: localhost
port: 8086
username: dianxin
password: dianxin@123
reconnect-delay-millis: 3000
```
**适配器配置** (`.env` 或环境变量):
```bash
ADXP_HOST=host.docker.internal # 指向宿主机 mock 服务器
ADXP_PORT=7001
```
**Mock 服务器**:
```bash
python3 tools/mock_adxp.py --host 0.0.0.0 --port 7001 --auto --interval 10
```
### 生产环境(连接真实数据中台)
**主应用配置** (`qaup-admin/src/main/resources/application-prod.yml`):
```yaml
data:
collector:
adxp-adapter:
host: 192.168.1.100 # 适配器服务的真实 IP
port: 8086
username: ${ADXP_USERNAME} # 从环境变量读取
password: ${ADXP_PASSWORD}
reconnect-delay-millis: 3000
```
**适配器配置** (`.env` 文件):
```bash
ADXP_HOST=10.10.10.100 # 真实数据中台 IP
ADXP_PORT=7001
```
---
## 🐛 故障排查
### 问题 1: Docker 容器启动失败
**检查日志**:
```bash
docker logs adxp-adapter
```
**常见错误**:
- `Cannot find ifconfig` → Dockerfile 使用了 Alpine 镜像,应使用 `openjdk:8-jdk`
- `Connection refused` → Mock 服务器未启动或端口错误
### 问题 2: 登录失败 (code=802/803)
**原因**: SDK 无法连接到数据中台
**排查步骤**:
```bash
# 1. 检查 mock 服务器是否运行
lsof -ti:7001
# 2. 测试网络连接
curl http://localhost:7001/LoginService?wsdl
# 3. 检查适配器环境变量
docker exec adxp-adapter env | grep ADXP
# 4. 查看适配器日志
docker logs adxp-adapter 2>&1 | grep -E "ERROR|Exception"
```
### 问题 3: HTTP 406 Not Acceptable
**原因**: DTO 类缺少 getter/setter 方法
**解决方案**:
- 确保 `LoginResponse`、`MessageResponse` 有显式的 getter/setter不要只依赖 Lombok
- 确保 `jackson-databind` 依赖存在
**验证**:
```bash
# 查看 pom.xml 中的 Jackson 依赖
grep -A 5 "jackson-databind" adxp-adapter/pom.xml
```
### 问题 4: Apple Silicon 兼容性
**错误**: `openjdk@8: The x86_64 architecture is required`
**解决方案**: 使用 Docker推荐或使用 Rosetta 2 运行 x86_64 版本
### 问题 5: Mock 响应格式错误
**症状**: SDK 返回 code=803 "发送请求错误"
**排查**:
```bash
# 查看 mock 服务器日志
tail -f /tmp/mock_adxp.log
# 检查 SOAP 响应格式
curl -X POST http://localhost:7001/LoginService \
-H "Content-Type: text/xml" \
-d '<?xml version="1.0"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body><log:login xmlns:log="http://LoginService">
<username>dianxin</username><password>dianxin@123</password>
</log:login></soapenv:Body>
</soapenv:Envelope>'
```
---
## 📊 监控和日志
### 健康检查端点
```bash
# 适配器健康状态
curl http://localhost:8086/api/adxp/health
# 返回: {"activeSessions":0,"status":"UP"}
# Spring Boot Actuator
curl http://localhost:8086/actuator/health
```
### 日志查看
```bash
# Docker 容器日志
docker logs -f adxp-adapter
# 实时过滤错误
docker logs -f adxp-adapter 2>&1 | grep -E "ERROR|WARN"
# Mock 服务器日志
tail -f /tmp/mock_adxp.log
# 主应用日志
tail -f qaup-admin/app.log | grep -E "adxp|flight"
```
### 性能监控
```bash
# 容器资源使用
docker stats adxp-adapter
# 网络延迟测试
time curl -s http://localhost:8086/api/adxp/health
```
---
## 📈 性能指标
- **HTTP 延迟**: < 5ms局域网
- **适配器内存**: ~256MB基础+ SDK 使用
- **并发支持**: 多个主应用实例可共享一个适配器
- **会话管理**: 自动重连无需手动维护
---
## ✅ 验收检查清单
部署前请确认
- [ ] Mock 服务器正常运行开发环境
- [ ] 适配器 Docker 镜像构建成功
- [ ] 适配器容器启动成功
- [ ] 健康检查返回 `{"status":"UP"}`
- [ ] 登录测试成功返回 sessionId
- [ ] 主应用能通过 HTTP 调用适配器
- [ ] 日志中无 ERROR 级别错误
---
## 🚀 下一步
1. **开发环境测试完成** - Mock 服务器 + 适配器正常工作
2. 🔧 **生产部署** - 修改 ADXP_HOST 连接真实数据中台
3. 📊 **监控集成** - 添加 Prometheus metrics可选
4. 🔒 **安全加固** - 添加 API 认证/授权可选
5. 📦 **K8s 部署** - 创建 Deployment Service 配置可选