lukaszaleckas/laravel-circuit-breaker

此包最新版本(dev-main)没有提供许可证信息。

dev-main 2023-02-05 17:04 UTC

This package is auto-updated.

Last update: 2024-09-10 21:57:16 UTC


README

断路器是软件开发中常用的一种设计模式。它用于检测故障,并封装防止故障不断重复发生的逻辑,包括维护期间、临时外部系统故障或意外系统困难。

来源: 维基百科

进一步解释

让我们用一个例子来解释这个功能,因为我认为它们比定义更好。

假设你有两个微服务 AB

  1. 你从 A 调用微服务 B,并配置了30秒的超时。
  2. B 无法响应,你收到一个超时错误。
  3. 你继续向 A 发送请求,并且从 B 收到超时错误。
  4. 请求队列 A 开始填满。
  5. A 的请求开始超时。

在这种情况下,跟踪 AB 的请求失败并立即返回错误会更好。

断路器模式正是这样做的 - 在 A 中跟踪对 B 的请求失败,如果在特定时间窗口内失败次数超过阈值,则跳过这些请求并立即返回错误。

安装

  1. 运行
composer require lukaszaleckas/laravel-circuit-breaker

如果服务提供者未自动注册,请在应用程序的 app.php 中添加

LaravelCircuitBreaker\CircuitBreakerServiceProvider::class

  1. 发布 circuit-breaker.php 配置文件
    php artisan vendor:publish --tag=circuit-breaker

使用方法

通过构造函数注入 LaravelCircuitBreaker\CircuitBreakerService

使用 getCircuitBreaker 并传入服务名称作为参数以获取断路器实例。

方法使用

  • 在您的 HTTP 客户端中使用 isClosed 来确定是否可以发送请求。
  • 当您收到错误时,请使用 registerFailure
  • 当您收到成功响应时,请使用 registerSuccess。这用于在断路器半开时关闭断路器。