toplan / task-balancer
轻量级且强大的任务负载均衡。
Requires
- php: >=5.4.0
README
轻量级且强大的任务负载均衡。
就像nginx负载均衡😄
特性
- 支持每个任务的多驱动。
- 根据驱动的权重值自动选择执行任务的驱动。
- 支持多个备用驱动。
- 任务生命周期和钩子系统。
安装
composer require toplan/task-balancer:~0.5
用法
//define a task Balancer::task('task1', function($task){ //define a driver for current task like this: $task->driver('driver_1 100 backup', function ($driver, $data) { //do something here ... //set whether run success/failure at last if ($success) { $driver->success(); } else { $driver->failure(); } //return some data you need return 'some data you need'; }); //or like this: $task->driver('driver_2', 90, function ($driver, $data) { //...same as above.. })->data(['this is data 2']); //or like this: $task->driver('driver_3') ->weight(0)->backUp() ->data(['this is data 3']) ->work(function ($driver, $data) { //...same as above.. }); }); //run the task $result = Balancer::run('task1');
$result结构
[ 'success' => true, 'time' => [ 'started_at' => timestamp, 'finished_at' => timestamp ], 'logs' => [ '0' => [ 'driver' => 'driver_1', 'success' => false, 'time' => [ 'started_at' => timestamp, 'finished_at' => timestamp ], 'result' => 'some data you need' ], ... ] ]
API
均衡器
Balancer::task($name[, $data][, Closure $ready]);
创建一个任务实例,并返回它。闭包$ready立即用参数$task调用。
Balancer::task('taskName', $data, function($task){ //task's ready work, such as create drivers. });
$data将存储在任务实例中。
Balancer::run($name[, array $options])
通过名称运行任务,并返回结果数据。
$options的键
data
driver
Task
name($name)
设置任务名称。
data($data)
设置任务数据。
driver($config[, $weight][, 'backup'], Closure $work)
为任务创建一个驱动程序。闭包$work将用参数$driver和$data调用。
期望$weight是一个整数,默认值为1。
$task->driver('driverName 80 backup', function($driver, $data){ //driver's job content. });
hasDriver($name)
是否具有指定的驱动程序。
getDriver($name)
通过名称获取驱动程序。
removeDriver($name)
通过名称从驱动程序池中删除驱动程序。
Driver
weight($weight)
设置驱动程序的权重值。
backup($is)
设置是否为备用驱动程序。
期望$is为布尔值,默认为true。
data($data)
设置驱动程序的数据。
$data将存储在驱动程序实例中。
work(Closure $work);
设置驱动程序的工作内容。
$data等于$driver->getData()
reset($config[, $weight][, 'backup'], Closure $work)
重置驱动程序的权重值、工作内容和重置是否为备用。
destroy()
从属于任务中删除驱动程序。
failure()
设置驱动程序运行失败。
success()
设置驱动程序运行成功。
getDriverData()
获取存储在驱动程序实例中的数据。
getTaskData()
获取存储在任务实例中的数据。
生命周期 & 钩子
支持每个钩子的多个处理器!
钩子
用法
-
$task->hook($hookName, $handler, $override)
-
$task->beforeCreateDriver($handler, $override)
-
$task->afterCreateDriver($handler, $override)
-
$task->beforeRun($handler, $override)
-
$task->beforeDriverRun($handler, $override)
-
$task->afterDriverRun($handler, $override)
-
$task->afterRun($handler, $override)
$override
默认为false
。
//example $task->beforeRun(function($task, $index, $handlers, $prevReturn){ //what is $prevReturn? echo $prevReturn == null; //true //what is $index? echo $index == 0; //true //what is $handlers? echo count($handlers); //2 //do something.. return 'beforeRun_1'; }, false); $task->beforeRun(function($task, $index, $handlers, $prevReturn){ //what is $prevReturn? echo $prevReturn == 'beforeRun_1'; //true //what is $index? echo $index == 1; //true //what is $handlers? echo count($handlers); //2 //do other something.. }, false);
依赖项
许可证
MIT