35 lines
1003 B
JavaScript
35 lines
1003 B
JavaScript
const logger = require('./logger');
|
|
const config = require('../config/env');
|
|
|
|
//全局限流配置
|
|
let requestCount = 0;
|
|
let lastResetTime = Date.now();
|
|
|
|
//熔断检查器
|
|
function checkCircuitBreaker() {
|
|
const now = Date.now();
|
|
if (now - lastResetTime > config.app.rate) {
|
|
requestCount = 0;
|
|
lastResetTime = now;
|
|
}
|
|
requestCount++;
|
|
if (requestCount > config.app.maxRequests) {
|
|
const msg = `Circuit breaker triggered: Exceeded ${config.app.maxRequests} requests in ${config.app.rate/1000}s. Exiting...`;
|
|
|
|
//同步写入fatal日志
|
|
logger.fatal("============================");
|
|
logger.fatal(`${msg}`);
|
|
logger.fatal("============================");
|
|
if (!config.app.debugMode) {
|
|
process.exit(1);
|
|
} else {
|
|
logger.warn('Debug mode enabled, not exiting.');
|
|
requestCount = 0;
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
module.exports = { checkCircuitBreaker };
|