multi-lane-manager
Version:
Nacos 泳道管理与请求路由组件
83 lines (68 loc) • 3.42 kB
JavaScript
/**
* 简单的缓存功能测试脚本
* 用于验证 Nacos 实例查询缓存机制
*/
// 模拟环境变量
process.env.SERVICE_NAME = 'test-service';
process.env.LANE_ENABLE = 'true';
process.env.LANE_ID = 'test-lane';
process.env.NACOS_CACHE_TTL = '3000'; // 3秒缓存用于测试
const { getNacosLaneInstances, clearNacosInstanceCache, getNacosCacheStats } = require('./dist/index.mjs');
async function testCache() {
console.log('🧪 开始测试 Nacos 实例查询缓存机制...\n');
try {
// 清理现有缓存
clearNacosInstanceCache();
console.log('1. ✅ 清理现有缓存');
// 第一次查询(应该发起网络请求)
console.log('\n2. 🔍 第一次查询实例...');
const start1 = Date.now();
const instances1 = await getNacosLaneInstances('test-service', 'test-lane');
const time1 = Date.now() - start1;
console.log(` ⏱️ 耗时: ${time1}ms, 实例数量: ${instances1.length}`);
// 立即第二次查询(应该使用缓存)
console.log('\n3. 💾 第二次查询实例(应该使用缓存)...');
const start2 = Date.now();
const instances2 = await getNacosLaneInstances('test-service', 'test-lane');
const time2 = Date.now() - start2;
console.log(` ⏱️ 耗时: ${time2}ms, 实例数量: ${instances2.length}`);
console.log(` 📊 性能提升: ${((time1 - time2) / time1 * 100).toFixed(1)}%`);
// 查看缓存统计
console.log('\n4. 📈 缓存统计信息:');
const stats = getNacosCacheStats();
console.log(` 总缓存项: ${stats.totalItems}`);
console.log(` 有效缓存: ${stats.validItems}`);
console.log(` 过期缓存: ${stats.expiredItems}`);
console.log(` 进行中请求: ${stats.pendingRequests}`);
// 并发请求测试(应该去重)
console.log('\n5. 🔄 并发请求测试(应该去重)...');
clearNacosInstanceCache();
const concurrentStart = Date.now();
const promises = Array(5).fill().map(() =>
getNacosLaneInstances('test-service', 'test-lane')
);
const results = await Promise.all(promises);
const concurrentTime = Date.now() - concurrentStart;
console.log(` ⏱️ 5个并发请求总耗时: ${concurrentTime}ms`);
console.log(` 📊 所有请求返回相同结果: ${results.every(r => r.length === results[0].length)}`);
// 等待缓存过期
console.log('\n6. ⏰ 等待缓存过期(3秒)...');
await new Promise(resolve => setTimeout(resolve, 3500));
// 缓存过期后查询
console.log('\n7. 🔍 缓存过期后查询...');
const start3 = Date.now();
const instances3 = await getNacosLaneInstances('test-service', 'test-lane');
const time3 = Date.now() - start3;
console.log(` ⏱️ 耗时: ${time3}ms, 实例数量: ${instances3.length}`);
console.log('\n✅ 缓存功能测试完成!');
} catch (error) {
console.error('\n❌ 测试过程中出错:', error.message);
// 如果是网络错误(Nacos 不可用),这是正常的
if (error.message.includes('ECONNREFUSED') || error.message.includes('timeout')) {
console.log('\n💡 提示: 这可能是因为 Nacos 服务器不可用,这是正常的测试结果');
console.log(' 缓存机制的逻辑是正确的,只是无法连接到实际的 Nacos 服务器');
}
}
}
// 运行测试
testCache().catch(console.error);