iak/dispatch-group

该软件包已被放弃,不再维护。未建议替代软件包。

在队列中的一组作业完成后运行代码,无论成功与否。

v0.0.1 2020-05-08 21:15 UTC

This package is auto-updated.

Last update: 2022-11-05 21:06:54 UTC


README

由于此功能现在已存在于 Laravel 核心中,因此不再需要此软件包,因此不再维护。

Laravel dispatch-group

在队列中的一组作业完成后运行代码,无论成功与否。

受javascript的Promise.all()的启发,此软件包提供了在作业完成时运行代码的类似API。

示例

dispatch_group([new FirstJob(), new SecondJob()])
    ->then(fn () => User::admin()->notifySuccess())
    ->catch(fn ($failedJobs) => User::admin()->notifyFailure($failedJobs))
    ->finally(fn () => User::admin()->notifyCompleted());

如何工作

除了传递给函数的作业外,还排队了一个作业,该作业监控作业并在它们完成时注册,无论它们是否成功运行。

这意味着监控作业将占用一个工作者,因此此软件包只有当您有3个或更多工作者或计划同步运行监控作业时才有意义。

安装

只需使用composer安装

composer require iak/dispatch-group

这就是全部!

兼容性

此软件包既适用于也适用于Laravel horizon,但仅支持redis驱动程序。

与Laravel 7和php 7.2进行了测试

辅助函数

除了上面提到的dispatch_group()函数外,还有一个dispatch_group_now()函数,该函数在当前进程中运行监控作业。

API

dispatch_group()和dispatch_group_now()函数返回一个作业,因此具有与其他任何作业相同的API(onQueue()、delay()、chain()等)。

除了这些之外,这些方法也可用

then(Closure $callback)

当所有作业都成功完成时调用的函数。

catch(Closure $callback)

如果有一个或多个作业失败时调用的函数。以数组形式获取失败的作业作为参数。

示例

dispatch_group([new FirstJob(), new SecondJob()])
    ->catch(fn ($failedJobs) => /* Do something with the failed jobs */);

finally(Closure $callback)

当所有作业完成时调用的函数,无论成功与否。

iterate(Closure $callable)

在监控作业检查所有作业是否完成时每次调用的函数(1秒间隔)。

dispatch()

调度作业。此方法在作业的__destruct方法中自动调用,但如果您需要确保它立即运行,请调用dispatch()。

groupQueue(String $queue)

与onQueue()相同,但此操作适用于传入的作业,而onQueue()适用于监控作业的作业。

测试

要运行测试,请运行

composer test