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还能执行的
用行了判断有点不认真吧,为啥不直接输出12345-300来看!