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 任务执行是完整的

  1. 任务触发

    $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();
  2. 任务代码,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 行打印记录

laravel批处理任务开启多个work后执行不完整

4. 您实际得到的结果?#

实际获取的不到 300 行,每次数量不一

5. 更换环境#

在 linux 上测试批任务处理,用 supervisor 开启多个 work, 没有发现 pending_jobs 了,但是 then,catch,finally 里面的回调方法都不执行,windows 里面开启单个 work 还能执行的

laravel批处理任务开启多个work后执行不完整

laravel批处理任务开启多个work后执行不完整

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。