深入讲解laravel6中的队列与任务调度

2022-05-15 0 650

(一)队列实现

在laravel中,队列的实现我们只需要通过操作,就能实现,在实现的前提,我们需要进行简单的配置,对config/queue.php进行修改,具体查看官方文档,这里我不进行详细说明,下面我们直接进入正题。

首先,通过执行php artisan make:job 任务类名称我们可以实现一个队列任务,执行该命令后,将会在app目录下生成Jobs目录并创建一个新的任务类,该任务类会自动继承Illuminate\\Contracts\\Queue\\ShouldQueue接口,我们的队列会调用该任务类的handle方法,因此我们只需要在handle里面去实现我们具体的业务逻辑,就可以轻松的实现任务类。而此时,我们这是对我们任务类进行处理,那我们该怎么去分配任务进行处理呢?
深入讲解laravel6中的队列与任务调度

在laravel中,任务的分发,也只需要通过简单的已实现的方法进行任务分配,我们只需要将任务指定对应的队列进行分发处理,具体的实现方式只需要以下简单的几行代码,便可以实现任务分发。

//任务指定到对应的队列$job = (new TestQueue())->onQueue('队列名称');//分发任务dispatch($job);

实现的队列的分发之后,我们通过运行php artisan queue:work队列处理器,该处理器便会对分发到队列里的任务进行处理,它会一直运行直到它被手动停止或终端关闭。需要注意的是,由于队列处理器是作为一个常驻进程并且在内存中保存着已经启动的应用状态,当我们修改对应的代码时,我们需要重启队列处理器才会载入修改后的代码逻辑。所以当我们对相应的任务类进行修改时,我们需要重启以保证正确性。

Supervisor 配置,这里官方文档讲得挺明白的,我就没必要在复述一次官方文档传送门

(二)任务调度

这里我直接引用官方文档的话语,简明易懂。

过去,你可能需要在服务器上为每一个调度任务去创建 Cron 入口。但是这种方式很快会变得不友好,因为这些任务调度不在源代码中,并且你每次都需要通过 SSH 链接登录到服务器中才能增加 Cron 入口。
Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口。你的任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义。

任务调度定义。在laravel官方文档中,我们更常用的是任务Artisan命令调度和队列调度。

//artisan命令调度$schedule->command('emails:send Taylor --force')->daily();//队列调度$schedule->job(new Heartbeat)->everyFiveMinutes();// 分发任务到「heartbeats」队列...$schedule->job(new Heartbeat, 'heartbeats')->everyFiveMinutes();

任务调用频率,如上步骤的daily()everyFiveMinutes()等,都是对任务的调用频率进行限制,从字面意义上也不难理解,其实就是设置每分钟或每天调用一次。具体调用如下(凑个长度),具体也可移步官方文档进行查看。

方法 描述

->cron(’* * * * *’);自定义 Cron 计划执行任务->everyMinute();每分钟执行一次任务->everyFiveMinutes();每五分钟执行一次任务->everyTenMinutes();每十分钟执行一次任务->everyFifteenMinutes();每十五分钟执行一次任务->everyThirtyMinutes();每三十分钟执行一次任务->hourly();每小时执行一次任务->hourlyAt(17);每小时第 17 分钟执行一次任务->daily();每天午夜执行一次任务(译者注:每天零点)->dailyAt(‘13:00’);每天 13 点执行一次任务->twiceDaily(1, 13);每天 1 点及 13 点各执行一次任务->weekly();每周执行一次任务->weeklyOn(1, ‘8:00’);每周一的 8 点执行一次任务->monthly();每月执行一次任务->monthlyOn(4, ‘15:00’);每月 4 号的 15 点 执行一次任务->quarterly();每季度执行一次任务->yearly();每年执行一次任务->timezone(‘America/New_York’);设置时区最后当然是启动调度器运行,执行* * * * * cd /项目地址 && php artisan schedule:run >> /dev/null 2>&1

(三)总结

其实也没啥好讲的,只是这两个通常对我们项目来说是至关重要的,官方文档中讲得过于繁琐且没必要,就简单讲一下常用的方式,laravel已经对这些常用操作进行封装,减少了很多麻烦,有兴趣再去了解其中的实现逻辑,至少先知道怎么用。

相关推荐:最新的五个Laravel视频教程

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 深入讲解laravel6中的队列与任务调度 https://www.jike1995.com/37033.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务