orrison/laravel-are-we-there-yet

跟踪相关作业,当所有作业都完成时执行闭包

3.0.1 2020-08-03 18:43 UTC

README

易于使用的辅助方法,用于分发作业列表和作业链,当所有作业完成后,触发最后一个最终作业。通常我们分发的作业可以并行运行,但一旦所有作业都完成,就需要执行其他操作。

使用parallelDispatch辅助方法,您可以分发作业列表和链式作业,一旦它们全部成功完成,将触发您定义的“完成作业”。

    /**
     * parallelDispatch
     *
     * @param mixed $jobList An array of job objects you would like dispatched and tracked.
     * Adding a multidimensional array will dispatch the sub-array in a job chain in the order they are listed
     * @param object $completionJob A fully instantiated class for the job to be run once all other jobs in the job list have completed.
     * @return void
     */
    function parallelDispatch($jobList, $completionJob)

安装 & 设置

使用以下命令通过composer安装

composer require orrison/laravel-are-we-there-yet

需要两个表来跟踪awty_goalsawty_tasks。它们可以在安装后运行迁移来添加。

php artisan migrate

在设置好包和表之后,您现在可以通过parallelDispatch分发一组作业,一旦所有作业都完成,将触发“完成作业”。包含在集群中的所有作业都必须具有Trackable特性。完成作业不需要特性。

示例

并行运行作业列表

SomeJobToBeRunAfter将在所有作业都完成后运行。

    parallelDispatch(
        [
            new JobOne(),
            new JobTwo($arg1, $arg2),
        ],
        new SomeJobToBeRunAfter($someJobArg)
    );

运行包含作业链的作业列表

链中的作业也可以通过在主$jobList中包含一个作业对象子数组来分发。它们将按列表中的顺序链接。

    parallelDispatch(
        [
            new JobOne(),
            [
                new chainedJobOne($arg1),
                new chainedJobTwo(),
            ],
            new JobTwo($arg1, $arg2),
        ],
        new SomeJobToBeRunAfter($someJobArg)
    );

在上面的示例中,JobOneJobTwochainedJobOne将立即分发。但chainedJobTwo和该数组中的其他任何作业都将链接到chainedJobOne,并且将按它们列出的顺序顺序完成。

基于作业跟踪:[https://github.com/rafter-platform/rafter](https://github.com/rafter-platform/rafter)

测试

composer test