datashaman/job-chain

使用缓存将作业链在一起。

dev-main 2023-07-09 03:03 UTC

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 表示的依赖图,执行将按顺序通过 JobOneJobTwoJobThree

事件监听器应该接收到值 JobThree has run,这是 done 作业提交的值。

如果链未定义 done 作业,则假定它是定义中的最后一个作业。

测试构建。