laravel批处理任务开启多个work后执行不完整
1. 运行环境#
1). 当前使用的 Laravel 版本?#
php 7.3.9
2). 当前使用的 php/php-fpm 版本?#
PHP 版本:
php 7.3.9
php-fpm 版本:
php 7.3.9
3). 当前系统#
windows 10
4). 业务环境#
5). 相关软件版本#
laravel 8.5
2. 问题描述?#
当开启多个 work 即启动多个 php artisan queue:work redis --queue=test
命令时,批任务处理不完整,一直未等到任务执行完成,但是开启单个 work 任务执行是完整的
任务触发
$arr = []; for($i=0;$i<300;$i++){ $arr[] = new TestJob(); } $batch = Bus::batch($arr)->then(function (Batch $batch) { // 所有任务都成功完成... Log::info('batch--'.'执行完成'); })->catch(function (Batch $batch, Throwable $e) { // 检测到第一批任务失败... Log::info($e->getMessage()); })->finally(function (Batch $batch) { // 批处理已完成执行... })->onConnection('redis')->onQueue('test')->dispatch();
任务代码,TestJob 里的执行内容
public function handle() { if ($this->batch()->cancelled()) { // Determine if the batch has been cancelled... Log::info('cancelled'); return; } Log::info($this->batch()->id); // 导入 CSV 文件的一部分... }
3. 您期望得到的结果?#
理论上应该获得 300 行打印记录
4. 您实际得到的结果?#
实际获取的不到 300 行,每次数量不一
5. 更换环境#
在 linux 上测试批任务处理,用 supervisor 开启多个 work, 没有发现 pending_jobs 了,但是 then,catch,finally 里面的回调方法都不执行,windows 里面开启单个 work 还能执行的
推荐文章: