You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于响应状态控制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:49:53