lukaszaleckas / laravel-circuit-breaker
此包最新版本(dev-main)没有提供许可证信息。
dev-main
2023-02-05 17:04 UTC
Requires
- php: ^8.0
- ext-json: *
- laravel/framework: ^8.83|^9.0
Requires (Dev)
- mockery/mockery: ^1.5
- nunomaduro/larastan: ^1.0
- orchestra/testbench: ^6.24
- phpstan/phpstan-mockery: ^1.0
- phpunit/phpunit: ^9.5
- slevomat/coding-standard: ^6.4
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2024-09-10 21:57:16 UTC
README
断路器是软件开发中常用的一种设计模式。它用于检测故障,并封装防止故障不断重复发生的逻辑,包括维护期间、临时外部系统故障或意外系统困难。
来源: 维基百科
进一步解释
让我们用一个例子来解释这个功能,因为我认为它们比定义更好。
假设你有两个微服务 A
和 B
- 你从
A
调用微服务B
,并配置了30秒的超时。 B
无法响应,你收到一个超时错误。- 你继续向
A
发送请求,并且从B
收到超时错误。 - 请求队列
A
开始填满。 - 对
A
的请求开始超时。
在这种情况下,跟踪 A
到 B
的请求失败并立即返回错误会更好。
断路器模式正是这样做的 - 在 A
中跟踪对 B
的请求失败,如果在特定时间窗口内失败次数超过阈值,则跳过这些请求并立即返回错误。
安装
- 运行
composer require lukaszaleckas/laravel-circuit-breaker
如果服务提供者未自动注册,请在应用程序的 app.php
中添加
LaravelCircuitBreaker\CircuitBreakerServiceProvider::class
。
- 发布
circuit-breaker.php
配置文件
php artisan vendor:publish --tag=circuit-breaker
使用方法
通过构造函数注入 LaravelCircuitBreaker\CircuitBreakerService
。
使用 getCircuitBreaker
并传入服务名称作为参数以获取断路器实例。
方法使用
- 在您的 HTTP 客户端中使用
isClosed
来确定是否可以发送请求。 - 当您收到错误时,请使用
registerFailure
。 - 当您收到成功响应时,请使用
registerSuccess
。这用于在断路器半开时关闭断路器。