// 项目入口文件 import config from './config/config.js'; import { KafkaConsumer } from './kafka/consumer.js'; import { HeartbeatProcessor } from './processor/heartbeatProcessor.js'; import { DatabaseManager } from './db/databaseManager.js'; class WebBLSHeartbeatServer { constructor() { this.config = config; this.kafkaConsumer = null; this.heartbeatProcessor = null; this.databaseManager = null; } async start() { try { // 初始化数据库连接 this.databaseManager = new DatabaseManager(this.config.db); await this.databaseManager.connect(); console.log('数据库连接成功'); // 初始化处理器 this.heartbeatProcessor = new HeartbeatProcessor( this.config.processor, this.databaseManager ); // 初始化Kafka消费者 this.kafkaConsumer = new KafkaConsumer( this.config.kafka, this.heartbeatProcessor.processMessage.bind(this.heartbeatProcessor) ); await this.kafkaConsumer.connect(); await this.kafkaConsumer.subscribe(); await this.kafkaConsumer.startConsuming(); console.log('Kafka消费者启动成功'); console.log('BLS心跳接收端启动成功'); } catch (error) { console.error('启动失败:', error); process.exit(1); } } async stop() { try { if (this.kafkaConsumer) { await this.kafkaConsumer.stopConsuming(); await this.kafkaConsumer.disconnect(); } if (this.databaseManager) { await this.databaseManager.disconnect(); } console.log('BLS心跳接收端已停止'); } catch (error) { console.error('停止失败:', error); } } } // 启动服务器 const server = new WebBLSHeartbeatServer(); server.start(); // 处理进程终止信号 process.on('SIGINT', () => { server.stop(); process.exit(0); }); process.on('SIGTERM', () => { server.stop(); process.exit(0); }); export { WebBLSHeartbeatServer };