QAUP_Management/adxp-adapter/QUICKSTART.md

9.4 KiB
Raw Blame History

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 服务器(模拟数据中台)

# 在项目根目录
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-toolsSDK 需要 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-jdk
  • Connection 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 方法

解决方案:

  • 确保 LoginResponseMessageResponse 有显式的 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 级别错误

🚀 下一步

  1. 开发环境测试完成 - Mock 服务器 + 适配器正常工作
  2. 🔧 生产部署 - 修改 ADXP_HOST 连接真实数据中台
  3. 📊 监控集成 - 添加 Prometheus metrics可选
  4. 🔒 安全加固 - 添加 API 认证/授权(可选)
  5. 📦 K8s 部署 - 创建 Deployment 和 Service 配置(可选)