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

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

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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 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个月前 评论
代码如诗人生如歌

@zlxiche Job+Horizon

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 有什么方法可以监控到进度条进度么,任务进度我需要反馈到相关终端上。

1周前 评论
arunfung 5天前
seebyyu (作者) 3天前
arunfung 3天前
seebyyu (作者) 17小时前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!