请教下,Laravel 如何让程序在后台执行超长时间的代码?

1.后台执行,并且可以随时查询执行进度.
2.这个超长时间 可能是5分钟或者1个小时.

考虑过队列,不过如果设置时长针对这个超长任务的话,又对普通队列产生影响了.

各位大佬怎么解决,或者有没有扩展包呢

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

Laravel 支持 CLI 模式,你可以在 CLI 模式下执行超长任务

4年前 评论
arunfung

PHP Command Line Interface了解一下,包括 laravel 提供了Artisan Console可以直接实现,以及官方支持执行进度条,可以很好的解决你目前的问题。

#### Progress Bars
$users = App\User::all();

$bar = $this->output->createProgressBar(count($users));

$bar->start();

foreach ($users as $user) {
    $this->performTask($user);

    $bar->advance();
}

$bar->finish();
4年前 评论

自定义队列

4年前 评论

感谢各位,忘了补充一点,我的需求主要是从网站后台web方式点击执行,让其可以在后台运行,这样我web可以关闭,后期随时来查看执行状态

4年前 评论

感谢各位.

估计要采用自定义queue,supervisor 单独运行一个

php artisan queue:work --queue=cust ... 这样就可以和其他的队列区分开了

然后代码里
dispatch((new Job)->onQueue('cust'));

晚上试试时间能不能支持1个小时的
然后 Laravel Horizon 监控进度

4年前 评论

问题来了 config/queue.php 里面如何设置这个多 queue呢...

'redis' => [
        'driver' => 'redis',
        'connection' => 'queue',
        'queue' => 'default',
        'expire' => 60,
    ], 
4年前 评论

原来是在 queue.php 这样加就行了,完美~~

'cust' => [
        'driver' => 'redis',
         'connection' => 'queue',
        'queue' => 'cust',
        'expire' => 0,
    ],
4年前 评论

@arunfung 有什么方法可以监控到进度条进度么,任务进度我需要反馈到相关终端上。

4年前 评论
arunfung 4年前
seebyyu (作者) 4年前
arunfung 4年前
seebyyu (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!