- 创建 PolymarketConstants 常量类,集中管理所有 Polymarket API URL - 更新所有服务类,将配置注入改为使用常量: * ApiHealthCheckService: 移除配置注入,使用常量 * RetrofitFactory: 移除 CLOB 和 Gamma API URL 配置注入 * RelayClientService: 移除 Builder Relayer URL 配置注入 * BlockchainService: 移除 Data API URL 配置注入 * PolymarketApiKeyService: 移除 CLOB API URL 配置注入 * RetrofitConfig: 移除 CLOB API URL 配置注入 * OrderPushService: 移除 RTDS WebSocket URL 配置注入 * PolymarketActivityWsService: 移除 Activity WebSocket URL 配置注入 * CopyTradingWebSocketService: 移除 User WebSocket URL 配置注入 * PolymarketWebSocketHandler: 移除 RTDS WebSocket URL 配置注入 * UnifiedOnChainWsService: 添加连接状态查询方法 - 从 application.properties 移除相关配置项,添加说明注释 - 完善 API 健康检查,添加缺失的检测项: * Polymarket Activity WebSocket * 链上 WebSocket - 更新相关文档说明
184 lines
4.1 KiB
Markdown
184 lines
4.1 KiB
Markdown
# 订单推送功能测试指南
|
||
|
||
## 测试准备
|
||
|
||
### 1. 确保有测试账户
|
||
- 账户必须已导入到系统
|
||
- 账户必须有有效的 API Key、Secret 和 Passphrase
|
||
- 可以通过 `/api/accounts/import` 接口导入账户
|
||
|
||
### 2. 启动后端服务
|
||
```bash
|
||
cd backend
|
||
./gradlew bootRun
|
||
```
|
||
|
||
### 3. 检查日志
|
||
启动后,应该看到以下日志:
|
||
- `订单推送服务已初始化`
|
||
- `已为账户 X (账户名) 建立 User Channel 连接并发送订阅消息`
|
||
|
||
## 测试步骤
|
||
|
||
### 测试 1: 检查服务初始化
|
||
1. 启动后端服务
|
||
2. 查看日志,确认 `OrderPushService` 已初始化
|
||
3. 确认所有有 API 凭证的账户都已建立连接
|
||
|
||
**预期结果**:
|
||
- 日志显示:`订单推送服务已初始化`
|
||
- 对于每个有 API 凭证的账户,日志显示:`已为账户 X 建立 User Channel 连接并发送订阅消息`
|
||
|
||
### 测试 2: 通过 WebSocket 订阅订单推送
|
||
|
||
#### 2.1 使用 WebSocket 客户端连接
|
||
```bash
|
||
# 使用 wscat 或其他 WebSocket 客户端
|
||
wscat -c ws://localhost:8000/ws
|
||
```
|
||
|
||
#### 2.2 发送订阅消息
|
||
```json
|
||
{
|
||
"type": 1,
|
||
"channel": "order",
|
||
"payload": {
|
||
"accountId": 1
|
||
}
|
||
}
|
||
```
|
||
|
||
**预期结果**:
|
||
- 收到订阅确认消息:
|
||
```json
|
||
{
|
||
"type": 4,
|
||
"channel": "order",
|
||
"status": 0,
|
||
"message": null
|
||
}
|
||
```
|
||
|
||
#### 2.3 等待订单消息
|
||
当账户有订单活动时(下单、更新、取消),应该收到推送消息:
|
||
```json
|
||
{
|
||
"type": 3,
|
||
"channel": "order",
|
||
"payload": {
|
||
"accountId": 1,
|
||
"accountName": "测试账户",
|
||
"order": {
|
||
"assetId": "...",
|
||
"eventType": "order",
|
||
"id": "...",
|
||
"market": "...",
|
||
"type": "PLACEMENT",
|
||
"side": "BUY",
|
||
"price": "0.5",
|
||
"originalSize": "10",
|
||
"sizeMatched": "0",
|
||
...
|
||
},
|
||
"timestamp": 1234567890
|
||
},
|
||
"timestamp": 1234567890
|
||
}
|
||
```
|
||
|
||
### 测试 3: 测试订单类型
|
||
|
||
#### 3.1 PLACEMENT (下单)
|
||
- 在 Polymarket 上创建一个订单
|
||
- 应该收到 `type: "PLACEMENT"` 的订单消息
|
||
|
||
#### 3.2 UPDATE (订单更新)
|
||
- 订单部分成交时
|
||
- 应该收到 `type: "UPDATE"` 的订单消息,`sizeMatched` 字段会更新
|
||
|
||
#### 3.3 CANCELLATION (订单取消)
|
||
- 取消一个订单
|
||
- 应该收到 `type: "CANCELLATION"` 的订单消息
|
||
|
||
### 测试 4: 多账户支持
|
||
1. 导入多个账户(都有 API 凭证)
|
||
2. 订阅不同账户的订单推送
|
||
3. 验证每个账户的订单消息都能正确推送
|
||
|
||
### 测试 5: 连接重连
|
||
1. 断开网络连接
|
||
2. 恢复网络连接
|
||
3. 验证连接是否自动重连(需要实现重连逻辑)
|
||
|
||
### 测试 6: 代理支持
|
||
如果配置了代理:
|
||
```bash
|
||
export ENABLE_PROXY=1
|
||
export PROXY_HOST=127.0.0.1
|
||
export PROXY_PORT=8888
|
||
```
|
||
|
||
启动服务后,应该看到日志:
|
||
- `已配置 WebSocket 代理: 127.0.0.1:8888`
|
||
|
||
## 常见问题排查
|
||
|
||
### 问题 1: 连接建立失败
|
||
**可能原因**:
|
||
- Polymarket RTDS 服务不可用
|
||
- 网络连接问题
|
||
- 代理配置错误
|
||
|
||
**排查步骤**:
|
||
1. 检查 Polymarket RTDS WebSocket URL(现在使用代码常量 `PolymarketConstants.RTDS_WS_URL`)
|
||
2. 检查网络连接
|
||
3. 查看详细错误日志
|
||
|
||
### 问题 2: 订阅消息发送失败
|
||
**可能原因**:
|
||
- 连接未完全建立就发送消息
|
||
- API 凭证无效
|
||
|
||
**排查步骤**:
|
||
1. 检查日志中的连接状态
|
||
2. 验证 API 凭证是否正确
|
||
3. 增加连接建立的等待时间
|
||
|
||
### 问题 3: 收不到订单消息
|
||
**可能原因**:
|
||
- 账户没有订单活动
|
||
- 订阅消息格式错误
|
||
- API 凭证权限不足
|
||
|
||
**排查步骤**:
|
||
1. 在 Polymarket 上手动创建一个订单
|
||
2. 检查订阅消息格式是否正确
|
||
3. 验证 API Key 是否有订单查询权限
|
||
|
||
### 问题 4: 账户 ID 为 null
|
||
**可能原因**:
|
||
- 账户未正确保存到数据库
|
||
- 账户 ID 未正确传递
|
||
|
||
**排查步骤**:
|
||
1. 检查数据库中的账户记录
|
||
2. 验证订阅消息中的 accountId 是否正确
|
||
|
||
## 日志关键字
|
||
|
||
搜索以下关键字查看相关日志:
|
||
- `订单推送服务已初始化`
|
||
- `已为账户 X 建立 User Channel 连接`
|
||
- `已发送 User Channel 订阅消息`
|
||
- `处理订单消息失败`
|
||
- `推送订单消息失败`
|
||
|
||
## 下一步
|
||
|
||
测试通过后,可以:
|
||
1. 实现前端订阅和 Notification 显示
|
||
2. 添加连接重连逻辑
|
||
3. 优化错误处理
|
||
4. 添加单元测试
|
||
|