<?php
require("./../core/functions.php");
class CircuitBreaker{
private $zSetKey="circuit";
public function invoke(object $class,string $method,array $params,callable $fallback){
global $redis;
//得使用try catch 易于捕获A重要函数里面发生的异常信息
try{
//这里没啥 就是直接掉核心的函数 执行正常的逻辑 也就用了个解包
return $class->$method(...$params);
}
catch (Throwable $ex){
//Throwable 是 PHP 7 中可以用作任何对象抛出声明的基本接口,包括 Expection (异常)和 Error (错误)。可以捕获致命的错误信息 https://www.jianshu.com/p/dbca816a9af5
$member=get_class($class)."_".$method;
$redis->client()->zIncrBy($this->zSetKey,1,$member);
return $fallback();//函数降级
}
}
}
function cbHandler(Exception $ex){
throw new Exception($ex->getMessage());
}
//将错误信息 包含致命错误信息 调用cbHandler回调函数 在回调函数当中将错误信息写到异常里面去 那么上边的try catch 当中就可以获取到异常
set_error_handler("cbHandler",E_ALL);
php7当中异常和错误的捕获
最新推荐文章于 2021-06-16 17:11:27 发布
本文介绍了一种使用PHP实现的电路断路器模式,该模式通过与Redis的交互来处理异常和错误,实现服务的降级和恢复。文章详细展示了如何创建一个电路断路器类,并在发生异常时调用回退函数。
1106

被折叠的 条评论
为什么被折叠?



