2026-01-16 16:19:31 +08:00
|
|
|
import fs from 'node:fs';
|
|
|
|
|
import path from 'node:path';
|
|
|
|
|
import kafka from 'kafka-node';
|
|
|
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
|
|
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
|
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
|
|
|
|
|
|
console.log('--- 环境检查脚本开始 ---');
|
|
|
|
|
console.log('当前时间:', new Date().toISOString());
|
|
|
|
|
console.log('当前目录 (cwd):', process.cwd());
|
|
|
|
|
console.log('脚本目录:', __dirname);
|
|
|
|
|
|
|
|
|
|
// 1. 检查 .env 文件
|
|
|
|
|
const pathsToCheck = [
|
|
|
|
|
path.resolve(process.cwd(), '.env'),
|
|
|
|
|
path.resolve(__dirname, '../.env'),
|
|
|
|
|
path.resolve(__dirname, '../../.env')
|
|
|
|
|
];
|
|
|
|
|
let envPath = null;
|
|
|
|
|
for (const p of pathsToCheck) {
|
|
|
|
|
if (fs.existsSync(p)) {
|
|
|
|
|
envPath = p;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-16 17:24:20 +08:00
|
|
|
let envConfig = {};
|
|
|
|
|
|
2026-01-16 16:19:31 +08:00
|
|
|
if (envPath) {
|
|
|
|
|
console.log('✅ 找到 .env 文件:', envPath);
|
|
|
|
|
try {
|
|
|
|
|
const content = fs.readFileSync(envPath, 'utf8');
|
|
|
|
|
const lines = content.split(/\r?\n/);
|
|
|
|
|
lines.forEach(line => {
|
|
|
|
|
const trimmed = line.trim();
|
|
|
|
|
if (!trimmed || trimmed.startsWith('#')) return;
|
|
|
|
|
const idx = trimmed.indexOf('=');
|
|
|
|
|
if (idx <= 0) return;
|
|
|
|
|
const key = trimmed.slice(0, idx).trim();
|
|
|
|
|
let val = trimmed.slice(idx + 1).trim();
|
|
|
|
|
if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
|
|
|
|
|
val = val.slice(1, -1);
|
|
|
|
|
}
|
|
|
|
|
envConfig[key] = val;
|
|
|
|
|
});
|
|
|
|
|
console.log('已加载环境变量:', Object.keys(envConfig).filter(k => k.startsWith('KAFKA') || k.startsWith('PG') || k.startsWith('REDIS')));
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('❌ 读取 .env 失败:', e.message);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
console.warn('⚠️ .env 文件不存在! 将使用系统环境变量或默认值');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. 确定 Kafka 配置
|
|
|
|
|
const brokers = envConfig.KAFKA_BROKERS || process.env.KAFKA_BROKERS || 'localhost:9092';
|
|
|
|
|
const topic = envConfig.KAFKA_TOPIC || process.env.KAFKA_TOPIC || 'blwlog4Nodejs-rcu-heartbeat-topic';
|
|
|
|
|
|
|
|
|
|
console.log('\n--- Kafka 连接配置 ---');
|
|
|
|
|
console.log('Brokers:', brokers);
|
|
|
|
|
console.log('Topic:', topic);
|
|
|
|
|
|
|
|
|
|
// 3. 测试连接
|
|
|
|
|
console.log('\n--- 开始连接测试 ---');
|
|
|
|
|
try {
|
|
|
|
|
const client = new kafka.KafkaClient({
|
|
|
|
|
kafkaHost: brokers,
|
|
|
|
|
connectTimeout: 5000,
|
|
|
|
|
requestTimeout: 5000
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
client.on('ready', () => {
|
|
|
|
|
console.log('✅ Kafka Client 连接成功 (Ready)');
|
|
|
|
|
|
|
|
|
|
console.log('正在加载 Topic Metadata...');
|
|
|
|
|
client.loadMetadataForTopics([topic], (err, results) => {
|
|
|
|
|
if (err) {
|
|
|
|
|
console.error('❌ 获取 Metadata 失败:', err);
|
|
|
|
|
client.close();
|
|
|
|
|
process.exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log('✅ Metadata 获取成功');
|
|
|
|
|
// console.log(JSON.stringify(results, null, 2));
|
|
|
|
|
|
|
|
|
|
const metadata = results[1].metadata;
|
|
|
|
|
if (metadata[topic]) {
|
|
|
|
|
console.log(`✅ Topic [${topic}] 存在,分区信息:`);
|
|
|
|
|
const partitions = metadata[topic];
|
|
|
|
|
Object.keys(partitions).forEach(p => {
|
|
|
|
|
console.log(` - Partition ${p}: Leader ${partitions[p].leader}, Replicas ${partitions[p].replicas}`);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
console.warn(`⚠️ Topic [${topic}] 在 Metadata 中未找到 (可能自动创建中)`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
client.close(() => {
|
|
|
|
|
console.log('\n测试完成: 网络连接正常');
|
|
|
|
|
process.exit(0);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
client.on('error', (err) => {
|
|
|
|
|
console.error('❌ Kafka 连接错误:', err);
|
|
|
|
|
// 不立即退出,等待超时或其他错误
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 10秒超时兜底
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
console.error('❌ 测试超时 (10秒) - 可能是防火墙或网络不通');
|
|
|
|
|
process.exit(1);
|
|
|
|
|
}, 10000);
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('❌ 初始化 Kafka Client 异常:', e);
|
|
|
|
|
}
|