下面是我的控制器操作:
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个工作经历悬而未决,就像没有明天,然后一个留在死亡之前,因为上述错误。
”””我做错了吗?**
1条答案
按热度按时间yjghlzjz1#
我在Laravel 8.6和Excel 3.1.48上遇到了同样的问题,由于超时,无法导出大文件。在我的情况下,我也有许多队列工人的主管。这似乎与问题over here有关(当使用并发队列工作线程时)。对我有效的解决方案是:
1.从导出类中删除ShouldQueue
1.创建另一个作业类并从那里调用导出
1.从控制器类调用作业类