这 断路器 封装者 @algoyounes 为 Laravel 引入了熔断器模式。它可以跟踪指定服务的故障,并在下游服务不可用时防止级联故障:
- 三态电路跟踪:闭合、断开和半断开
- 命名电路用于隔离每个服务的状态
- 生命周期回调(即,
onOpen,onSuccess) - 通过 Guzzle 中间件集成
X-Circuit-Key标题 - 和更多...
电路状态回调
每个服务都有自己专属的命名电路。您可以附加回调函数,以便在电路状态改变或调用成功/失败时做出响应:
电路
=
$this
->
电路管理器
->
服务
(
“支付服务”
(英文):电路
->
onOpen
(
功能
(
电路转换
$transition) {
日志
::
警告
(
支付服务回路已开启
,[
'状态'
=>
过渡
->
获取状态
(),]);});电路
->
成功时
(
功能
(
电路结果
$result,
电路转换
$transition) {
// 当包装调用成功时调用});电路
->
失败
(
功能
(
电路结果
$result,
电路转换
$transition) {
// 当包装调用失败时调用});
每个回调函数都由特定事件触发:例如,
onOpen
当电路转换到开路状态时运行(由于故障而阻塞调用),而
onSuccess
在成功完成包装调用后触发。
service-name
key 可以隔离每个服务的状态,让您可以独立跟踪不同的外部依赖项。
运行操作
电路配置完成后,请使用以下方式包装您的服务调用:
run()
断路器会根据当前状态来决定是否允许、阻止或测试呼叫:
电路
->
跑步
(
功能
(){
返回
Http
::
邮政
(
'https://payments.example.com/charge'
,$payload);});
您还可以使用
CircuitManager
直接跳过设置
CircuitBuilder
实例:
$this
->
电路管理器
->
跑步
(
“支付服务”
,
功能
(){
返回
Http
::
邮政
(
'https://payments.example.com/charge'
,$payload);});
Guzzle 中间件
如果你的项目直接使用 Guzzle,该软件包包含读取数据的中间件。
X-Circuit-Key
请求头用于标识要应用的电路:
使用
AlgoYounes\CircuitBreaker\Middleware\GuzzleMiddleware
;使用
GuzzleHttp\客户端
;使用
GuzzleHttp\HandlerStack
;$堆栈
=
处理堆栈
::
创造
();$堆栈
->
推
(
Guzzle中间件
::
创造
());客户端
=
新的
客户
([
“处理员”
=>
$stack]);$响应
=
客户端
->
得到
(
'https://api.example.com'
,[
'标题'
=>
[
“X电路密钥”
=>
'外部 API'
,],]);
您可以在 GitHub 上了解更多关于此软件包的信息: algoyounes/断路器 。





