随着前端技术的不断发展,前端应用的复杂度也在不断增加。在分布式环境下,应用程序的可用性变得越来越重要。当一个微服务或 API 不可用时,它将会导致许多问题,如尽早发现问题以便快速恢复等。
在这种情况下,熔断器就成为了 Web 前端的重要组件。在本篇文章中,我们将介绍一款名为 ckt-breaker 的 npm 包,它是一个非常优秀的熔断器实现。
简介
ckt-breaker 是一款 Node.js 的熔断器实现,主要用于控制对一个故障的微服务,避免使它陷入死循环等。熔断器由 Martin Fowler 提出,它关注容错和可恢复性的构件模式,主要适用于分布式系统中微服务的调用。
特性
- 非侵入式调用
- 同步和异步函数支持
- 请求信号量支持
- 断路器状态监听支持
- 支持回退模式
安装
安装 ckt-breaker 只需要使用 npm:
npm install ckt-breaker --save
示例
创建实例
const CircuitBreaker = require('ckt-breaker'); const ckt_breaker = new CircuitBreaker({ timeWindow : 10000, // 熔断器闭合的时间窗口,单位 ms failureThreshold : 50, // 故障阈值,达到阈值后进入熔断状态 fallback : false, // 回退函数,当熔断器处于打开状态时触发 requestVolumeThreshold : 2, // 请求阈值,单位时间窗口内的请求数量,达到请求阈值后才计算故障阈值 onStateChange : () => {}, // 当熔断器的状态发生改变时触发 });
注册函数
const fn1 = () => { return Promise.resolve('成功'); }; const fn2 = () => { return Promise.reject(new Error('失败')); }; ckt_breaker.registerFunction('success', fn1); ckt_breaker.registerFunction('error', fn2);
调用函数
-- -------------------- ---- ------- ----------------------------- -------- -- - ----------------------- -- --------- -- - ---------------------- --- --------------------------- -------- -- - ----------------------- -- --------- -- - ---------------------- ---
重试
-- -------------------- ---- ------- ----- --- - -- -- - ------ --- ----------------- ------- -- - ------------- -- - ---------- ------------- -- ------ --- -- ------------------------------------- ----- --------------------------- -------- -- - ----------------------- -- ------------ -- - -------------------------- --- ------- - ------------- -- - --------------------------- -------- -- - ----------------------- -- --------- -- - ---------------------- --- -- ----------------- - ---
当熔断器处于打开状态时,我们需要等待熔断器自动恢复。resetTime 属性会告诉我们重试前需要等待的时间。这种模式用于支持过程中断,并减少出错次数。
断路器状态监听
-- -------------------- ---- ------- ----- --- - -- -- - ------ ------------------ ------------- -- --------------------------------------- ----- ------------------------------------ ------- -- - ------------------ -------- ---- ------- --- ----------------------------- -------- -- - ----------------------- -- --------- -- - ---------------------- ---
结论
ckt-breaker 是一个非常有用的熔断器实现,它的功能强大,同时也非常易于使用。在 Node.js 微服务的场景中,我们可以方便的使用它来提高我们应用的可靠性。
参考文献
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005595f81e8991b448d6c9b