9.4 KiB
9.4 KiB
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 8(Homebrew 的 openjdk@8 只有 x86_64 版本)
🚀 快速开始(Docker 方式,推荐)
步骤 1: 启动 Mock 服务器(模拟数据中台)
# 在项目根目录
cd tools
python3 mock_adxp.py --host 0.0.0.0 --port 7001 --auto --interval 10
说明: Mock 服务器监听 0.0.0.0:7001,每 10 秒自动生成航班消息
步骤 2: 编译适配器服务
cd ../adxp-adapter
mvn clean package -DskipTests
预期输出: BUILD SUCCESS,生成 target/adxp-adapter.jar
步骤 3: 构建 Docker 镜像
docker build -t adxp-adapter:1.0.0 .
说明: 使用 OpenJDK 8(非 Alpine),包含 net-tools(SDK 需要 ifconfig 命令)
步骤 4: 启动 Docker 容器
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: 验证适配器服务
# 健康检查
curl http://localhost:8086/api/adxp/health
# 预期输出: {"activeSessions":0,"status":"UP"}
步骤 6: 测试完整流程
# 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: 启动主应用
cd ../qaup-admin
mvn spring-boot:run -Dspring-boot.run.profiles=dev,druid
主应用会自动通过 HTTP 调用适配器服务!
📋 Docker 常用命令
# 查看日志
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 服务器
cd tools
python3 mock_adxp.py --host 0.0.0.0 --port 7001 --auto --interval 10
步骤 2: 编译
cd ../adxp-adapter
mvn clean package -DskipTests
步骤 3: 启动适配器
# 如果系统默认是 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)
data:
collector:
adxp-adapter:
host: localhost # 适配器服务地址
port: 8086 # 适配器服务端口
username: dianxin
password: dianxin@123
reconnect-delay-millis: 3000
适配器服务配置 (application.yml)
adxp:
host: localhost # 真实数据中台地址(或 mock 服务器)
port: 7001 # 数据中台端口
🐳 Docker Compose 部署(生产环境)
1. 准备环境变量
# 创建 .env 文件
cat > .env << EOF
ADXP_HOST=10.10.10.100 # 真实数据中台 IP
ADXP_PORT=7001 # 真实数据中台端口
EOF
2. 编译和构建
cd adxp-adapter
mvn clean package -DskipTests
docker build -t adxp-adapter:1.0.0 .
3. 启动服务
# 使用 Docker Compose
docker-compose up -d
# 查看日志
docker-compose logs -f adxp-adapter
# 查看状态
docker-compose ps
4. 验证部署
# 健康检查
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. 停止服务
docker-compose down
🔧 环境切换
开发环境(使用 Mock)
主应用配置 (qaup-admin/src/main/resources/application-dev.yml):
data:
collector:
adxp-adapter:
host: localhost
port: 8086
username: dianxin
password: dianxin@123
reconnect-delay-millis: 3000
适配器配置 (.env 或环境变量):
ADXP_HOST=host.docker.internal # 指向宿主机 mock 服务器
ADXP_PORT=7001
Mock 服务器:
python3 tools/mock_adxp.py --host 0.0.0.0 --port 7001 --auto --interval 10
生产环境(连接真实数据中台)
主应用配置 (qaup-admin/src/main/resources/application-prod.yml):
data:
collector:
adxp-adapter:
host: 192.168.1.100 # 适配器服务的真实 IP
port: 8086
username: ${ADXP_USERNAME} # 从环境变量读取
password: ${ADXP_PASSWORD}
reconnect-delay-millis: 3000
适配器配置 (.env 文件):
ADXP_HOST=10.10.10.100 # 真实数据中台 IP
ADXP_PORT=7001
🐛 故障排查
问题 1: Docker 容器启动失败
检查日志:
docker logs adxp-adapter
常见错误:
Cannot find ifconfig→ Dockerfile 使用了 Alpine 镜像,应使用openjdk:8-jdkConnection refused→ Mock 服务器未启动或端口错误
问题 2: 登录失败 (code=802/803)
原因: SDK 无法连接到数据中台
排查步骤:
# 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依赖存在
验证:
# 查看 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 "发送请求错误"
排查:
# 查看 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>'
📊 监控和日志
健康检查端点
# 适配器健康状态
curl http://localhost:8086/api/adxp/health
# 返回: {"activeSessions":0,"status":"UP"}
# Spring Boot Actuator
curl http://localhost:8086/actuator/health
日志查看
# 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"
性能监控
# 容器资源使用
docker stats adxp-adapter
# 网络延迟测试
time curl -s http://localhost:8086/api/adxp/health
📈 性能指标
- HTTP 延迟: < 5ms(局域网)
- 适配器内存: ~256MB(基础)+ SDK 使用
- 并发支持: 多个主应用实例可共享一个适配器
- 会话管理: 自动重连,无需手动维护
✅ 验收检查清单
部署前请确认:
- Mock 服务器正常运行(开发环境)
- 适配器 Docker 镜像构建成功
- 适配器容器启动成功
- 健康检查返回
{"status":"UP"} - 登录测试成功,返回 sessionId
- 主应用能通过 HTTP 调用适配器
- 日志中无 ERROR 级别错误
🚀 下一步
- ✅ 开发环境测试完成 - Mock 服务器 + 适配器正常工作
- 🔧 生产部署 - 修改 ADXP_HOST 连接真实数据中台
- 📊 监控集成 - 添加 Prometheus metrics(可选)
- 🔒 安全加固 - 添加 API 认证/授权(可选)
- 📦 K8s 部署 - 创建 Deployment 和 Service 配置(可选)