php Laravel Excel不分块和超时

iszxjhcz  于 2023-06-21  发布在  PHP
关注(0)|答案(1)|浏览(114)

下面是我的控制器操作:

public function export() {

    (new ItemsExport)->queue('items.xlsx')->chain([
        new ExportItemsEmail(auth()->user()),
    ]);

    return redirect()->back()->with('success', 'File will be emailed to you once done.');
}

超级简单,我们排队导出(有超过5k的记录,可以更多)

class ItemsExport implements FromQuery, ShouldQueue {

    use Exportable;

    public function query() {
        return Item::query();
    }
}

再说一次没什么特别的。
问题:Horizon失败
我在horizon中得到这个错误:
Illuminate\Queue\MaxAttemptsExceedException:您访问的页面不存在或已被删除提示信息该作业以前可能已超时。在/home/adam/Documents/flare/vendor/laravel/framework/src/Illuminate/Queue/Worker. php:736
the docs开始,这是假设将其分块并启动许多作业。如何以往任何时候都在地平线上,我看到2 - 3个工作经历悬而未决,就像没有明天,然后一个留在死亡之前,因为上述错误。
”””我做错了吗?**

yjghlzjz

yjghlzjz1#

我在Laravel 8.6和Excel 3.1.48上遇到了同样的问题,由于超时,无法导出大文件。在我的情况下,我也有许多队列工人的主管。这似乎与问题over here有关(当使用并发队列工作线程时)。对我有效的解决方案是:
1.从导出类中删除ShouldQueue

class ItemsExport implements FromQuery{

use Exportable;

    public function query() {
        return Item::query();
    }
}

1.创建另一个作业类并从那里调用导出

class ItemsExportJob implements ShouldQueue {
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
     public function handle(){
        (new ItemsExport)->store('items.xlsx');
     }

  }

1.从控制器类调用作业类

ItemsExportJob::dispatch();

相关问题