qujsh / laravel-breaker

circuit breaker for laravel 5.6 or greater

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

laravel-breaker

基于laravel的简易熔断器实现,

Install

laravel5.6 以上版本

composer require qujsh/laravel-breaker

使用下面命令来生成配置文件,和注册命令行任务

php artisan vendor:publish --provider="Qujsh\Breaker\BreakerServiceProvider"

命令行定时任务监听,判断进程是否一直开启, App\Console\Kernel.php

protected function schedule(Schedule $schedule)
{
    //每分钟执行一次命令判断,使 监听程序一直开启
    $schedule->command('breaker:set-halfopen')->everyMinute();
}

Usage

自定义一个类,定义正常 handle()函数,和降级 fall()函数使程序能运行。示例:

namespace App\Breaker;

use Qujsh\Breaker\IService\BreakerServiceInterface;

class Breaker implements BreakerServiceInterface{

    public function handle()
    {
        // TODO: Implement handle() method.

        // success function to do something
        
        //throw new \Exception('test throw');
        return 'handle';
    }

    public function fall()
    {
        // TODO: Implement fall() method.

        //fall function to do, when handle() is fail 

        return 'fall';
    }
}

//callback execute
$breaker = new Qujsh\Breaker\Service\Breaker();
$result = $breaker->handle(new \App\Breaker\Breaker());

Config

default

return [
    'default' => [
        'attempts' => 3,           //times, when reach this value, breaker is open
        'interval' => 180,         //interval, it's time to change state from open to halfopen 
    ],

    //multi array with diff key should be defined over there
    
    'state_open' => 1,              //breaker state open
    'state_halfopen' => 2,          //breaker state halfopen
    'state_close' => 3,             //breaker state close, default
];
  • default:默认service,包含 attempts 和 interval,可定义多组,使用不同key值
  • attempts:尝试次数,几次后开启熔断器
  • interval:多久时间后转换状态为半开启, 时间单位 秒

About

circuit breaker for laravel 5.6 or greater

License:MIT License


Languages

Language:PHP 100.0%