iak / dispatch-group
在队列中的一组作业完成后运行代码,无论成功与否。
Requires
- php: ^7.4
- opis/closure: ^3.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- laravel/horizon: ^4.3
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^9.0
- predis/predis: ^1.1
- symfony/var-dumper: ^5
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