multi-lane-manager
Version:
Nacos 泳道管理与请求路由组件
207 lines (141 loc) • 5.88 kB
Markdown
# 多泳道管理器测试指南
本文档提供了一系列命令,用于测试多泳道管理器组件的功能。
## 前提条件
1. 确保已安装 Nacos 服务器,并且可以通过 `localhost:8848` 访问
2. 确保已安装并配置好多泳道管理器组件
## 1. 启动测试应用
首先,我们需要启动两个不同泳道的应用实例进行测试。
### 启动 dev-lane 实例(端口 3001)
```bash
# 启动 dev-lane 实例
NITRO_PORT=3001 LANE_ENABLE=true LANE_ID=dev-lane SERVICE_NAME=my-test-app LANE_SERVER=localhost:8848 npm run dev
```
### 启动 test-lane 实例(端口 3002)
在另一个终端窗口中运行:
```bash
# 启动 test-lane 实例
NITRO_PORT=3002 LANE_ENABLE=true LANE_ID=test-lane SERVICE_NAME=my-test-app LANE_SERVER=localhost:8848 npm run dev
```
## 2. 测试命令
### 基本健康检查
首先,检查两个实例的健康状态:
```bash
# 检查 dev-lane 实例的健康状态
curl http://localhost:3001/api/lane-manager/health | jq
# 检查 test-lane 实例的健康状态
curl http://localhost:3002/api/lane-manager/health | jq
```
### 测试普通请求
测试向每个实例发送普通请求:
```bash
# 向 dev-lane 实例发送请求
curl -v http://localhost:3001/api/hello
# 向 test-lane 实例发送请求
curl -v http://localhost:3002/api/hello
```
### 测试跨泳道请求
测试跨泳道请求功能:
```bash
# 从 dev-lane 实例向 test-lane 发送请求
curl -v -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello
# 从 test-lane 实例向 dev-lane 发送请求
curl -v -H "X-Lane-ID: dev-lane" http://localhost:3002/api/hello
```
### 使用调试头获取详细信息
使用调试功能获取请求处理的详细信息:
```bash
# 使用调试头从 dev-lane 向 test-lane 发送请求
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello
# 使用调试头从 test-lane 向 dev-lane 发送请求
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: dev-lane" http://localhost:3002/api/hello
```
### 测试泳道功能禁用情况
测试当泳道功能禁用时的行为:
```bash
# 启动一个禁用泳道功能的实例
NITRO_PORT=3003 LANE_ENABLE=false SERVICE_NAME=my-test-app npm run dev
# 向禁用泳道功能的实例发送请求
curl -v http://localhost:3003/api/hello
# 向禁用泳道功能的实例发送带泳道ID的请求(应该不会转发)
curl -v -H "X-Lane-ID: test-lane" http://localhost:3003/api/hello
# 使用调试头查看详细信息
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: test-lane" http://localhost:3003/api/hello
```
### 测试错误情况
测试当目标泳道不存在时的错误处理:
```bash
# 请求一个不存在的泳道
curl -v -H "X-Lane-ID: nonexistent-lane" http://localhost:3001/api/hello
# 使用调试头查看详细错误信息
curl -v -H "X-Lane-Debug: true" -H "X-Lane-ID: nonexistent-lane" http://localhost:3001/api/hello
```
### 测试 Cookie 中的泳道 ID
测试从 Cookie 中获取泳道 ID:
```bash
# 使用 Cookie 设置泳道 ID
curl -v --cookie "x-lane-id=test-lane" http://localhost:3001/api/hello
# 使用调试头和 Cookie 查看详细信息
curl -v -H "X-Lane-Debug: true" --cookie "x-lane-id=test-lane" http://localhost:3001/api/hello
```
## 3. 验证 Nacos 注册情况
如果您有 Nacos 控制台,可以通过以下方式验证服务注册情况:
1. 打开浏览器访问 Nacos 控制台:http://localhost:8848/nacos/
2. 使用默认用户名/密码登录:nacos/nacos
3. 在服务列表中查找 `my-test-app` 服务
4. 验证是否有两个实例,分别属于 `dev-lane` 和 `test-lane` 泳道
## 4. 一键测试脚本
您也可以创建一个简单的测试脚本来自动执行这些测试:
```bash
#!/bin/bash
echo "===== 测试多泳道管理器 ====="
echo -e "\n1. 检查健康状态"
echo "dev-lane 健康状态:"
curl -s http://localhost:3001/api/lane-manager/health | jq
echo "test-lane 健康状态:"
curl -s http://localhost:3002/api/lane-manager/health | jq
echo -e "\n2. 测试普通请求"
echo "向 dev-lane 发送请求:"
curl -s http://localhost:3001/api/hello
echo -e "\n向 test-lane 发送请求:"
curl -s http://localhost:3002/api/hello
echo -e "\n3. 测试跨泳道请求"
echo "从 dev-lane 向 test-lane 发送请求:"
curl -s -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello
echo -e "\n从 test-lane 向 dev-lane 发送请求:"
curl -s -H "X-Lane-ID: dev-lane" http://localhost:3002/api/hello
echo -e "\n4. 使用调试头"
echo "使用调试头从 dev-lane 向 test-lane 发送请求:"
curl -s -i -H "X-Lane-Debug: true" -H "X-Lane-ID: test-lane" http://localhost:3001/api/hello | grep -i "X-Lane-Detail"
echo -e "\n测试完成"
```
将此脚本保存为 `test-lane-manager.sh`,然后执行:
```bash
chmod +x test-lane-manager.sh
./test-lane-manager.sh
```
## 5. 预期结果
### 健康检查
健康检查应返回类似以下的 JSON 响应:
```json
{
"status": "ok",
"registered": true,
"port": 3001,
"laneId": "dev-lane",
"serviceName": "my-test-app",
"timestamp": "2023-06-01T12:00:00.000Z",
"nitroPluginLoaded": true
}
```
### 跨泳道请求
当发送跨泳道请求时,请求应该被转发到目标泳道的实例,并且响应头中应包含:
```
X-Proxied-By: multi-lane-manager
X-Original-Lane: dev-lane
X-Lane-ID: test-lane
```
### 调试信息
使用调试头时,响应头中应包含 `X-Lane-Detail` 头,其中包含请求处理的详细信息,例如:
```
X-Lane-Detail: 请求时间: 2023-06-01T12:00:00.000Z | 请求路径: GET /api/hello | 当前泳道: dev-lane | 服务名称: my-test-app | 目标泳道Header键: x-lane-id | 泳道ID来源: Header, 值: test-lane | 处理: 跨泳道请求 | 目标泳道: test-lane | 找到实例数量: 1 | 选择实例: 127.0.0.1:3002 | 负载均衡策略: ROUND_ROBIN
```