UNPKG

multi-lane-manager

Version:

Nacos 泳道管理与请求路由组件

83 lines (68 loc) 3.42 kB
/** * 简单的缓存功能测试脚本 * 用于验证 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);