datashaman / job-chain
使用缓存将作业链在一起。
dev-main
2023-07-09 03:03 UTC
Requires (Dev)
- orchestra/testbench: ^8
- tightenco/tlint: ^8
- vimeo/psalm: ^5.13
This package is auto-updated.
Last update: 2024-09-15 11:12:44 UTC
README
由缓存驱动的 Laravel 作业链。
安装
composer require datashaman/job-chain
监控
use Datashaman\JobChain\HasJobChain;
class MyJob
{
use HasJobChain;
public handle()
{
// do things
$value = 'my job has run';
$this->done($value);
}
}
配置
return [
/**
* Job chain loader will search through these paths for chain files.
*/
'paths' => [
base_path('chains'),
],
/**
* Cache store use for holding chain state.
*/
'cache' => env('JOB_CHAIN_CACHE', env('CACHE_DRIVER', 'file')),
/**
* Cache item lifetime. This must be longer than the total expected
* run time for any chain.
*
* This can overridden per chain.
*/
'lifetime' = env('JOB_CHAIN_LIFETIME', 60 * 60 * 24),
];
使用方法
给定此文件 chains/chain1.yml
done: jobThree
lifetime: 86400
jobs:
jobOne:
type: JobOne
jobTwo:
type: JobTwo
params:
documents: !job jobOne
jobThree:
type: JobThree
params:
documents: !job jobTwo
以及这三个测试作业类
use Datashaman\JobChain\HasJobChain;
class JobOne
{
use HasJobChain;
public function handle()
{
$this->done('JobOne has run');
}
}
class JobTwo
{
use HasJobChain;
public function handle()
{
$this->done('JobTwo has run');
}
}
class JobThree
{
use HasJobChain;
public function handle()
{
$this->done('JobThree has run');
}
}
当你运行此代码时
use JobChain;
Event::listen(function (JobChainDone $event) {
logger()->info('Job chain done', [
'jobChain' => $event->jobChain,
'value' => $event->value,
]);
});
JobChain::run('chain1');
由于 YAML 定义中使用的自定义类型 !job
表示的依赖图,执行将按顺序通过 JobOne
、JobTwo
和 JobThree
。
事件监听器应该接收到值 JobThree has run
,这是 done
作业提交的值。
如果链未定义 done
作业,则假定它是定义中的最后一个作业。
测试构建。