如何基于响应状态控制Node.js(opossum)中Circuit Breaker触发?
问题:如何让opossum断路器仅在特定HTTP状态码下触发打开?
我正在使用opossum为Node.js应用实现**circuit breaker(断路器)**功能。目前只要出现错误,无论是Bad Request(错误请求)还是Bad Gateway(网关错误),断路器都会触发打开并阻止后续请求。
有没有办法实现仅在特定响应状态(如HttpStatus.INTERNAL_SERVER_ERROR等)下才打开断路器?
当前代码
const response = this.circuitBreakers .fire(...args) .catch((result) => { console.log(`in circuit : ${result}`); this.logger.error(result?.response); });
临时解决办法
我暂时的处理方式是:如果返回非目标状态码,就在断路器打开后立即关闭,代码如下:
const response = this.circuitBreakers .fire(...args) .catch((result) => { if (parseInt(result.response.status) != 500) { this.circuitBreaker.close(); } else { console.log(`in circuit : ${result}`); this.logger.error(result?.response); } });
解决方案
感谢Charchit Kapoor的解答,我通过在Circuit Breaker的option中添加errorFilter配置解决了问题:
const options: CircuitOptions = { errorFilter: (err) => { const status = parseInt(err.response.status, 10); // 仅当错误状态码为500时,让断路器打开 if (status != 500) { return false; } return true; }, }
希望能帮到大家。
内容的提问来源于stack exchange,提问作者Yu Yu
相关产品推荐
相关产品推荐

