深入讲解laravel6中的队列与任务调度
(一)队列实现
在laravel中,队列的实现我们只需要通过操作,就能实现,在实现的前提,我们需要进行简单的配置,对config/queue.php
进行修改,具体查看官方文档,这里我不进行详细说明,下面我们直接进入正题。
首先,通过执行
php artisan make:job 任务类名称
我们可以实现一个队列任务,执行该命令后,将会在app目录下生成Jobs目录并创建一个新的任务类,该任务类会自动继承Illuminate\Contracts\Queue\ShouldQueue
接口,我们的队列会调用该任务类的handle方法,因此我们只需要在handle里面去实现我们具体的业务逻辑,就可以轻松的实现任务类。而此时,我们这是对我们任务类进行处理,那我们该怎么去分配任务进行处理呢?-
在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视频教程
以上是深入讲解laravel6中的队列与任务调度的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Django和Laravel都是全栈框架,Django适合Python开发者和复杂业务逻辑,Laravel适合PHP开发者和优雅语法。1.Django基于Python,遵循“电池齐全”哲学,适合快速开发和高并发。2.Laravel基于PHP,强调开发者体验,适合小型到中型项目。

Laravel是如何在后端逻辑中发挥作用的?它通过路由系统、EloquentORM、认证与授权、事件与监听器以及性能优化来简化和增强后端开发。1.路由系统允许定义URL结构和请求处理逻辑。2.EloquentORM简化数据库交互。3.认证与授权系统便于用户管理。4.事件与监听器实现松耦合代码结构。5.性能优化通过缓存和队列提高应用效率。

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

PHP和Laravel不是直接可比的,因为Laravel是基于PHP的框架。1.PHP适合小型项目或快速原型开发,因其简单直接。2.Laravel适合大型项目或高效开发,因其提供丰富功能和工具,但学习曲线较陡,性能可能不如纯PHP。

laravelisabackendframeworkbuiltonphp,设计ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

想要学习 Laravel 框架,但苦于没有资源或经济压力?本文为你提供了免费学习 Laravel 的途径,教你如何利用网络平台、文档和社区论坛等资源,从入门到掌握,为你的 PHP 开发之旅奠定坚实基础。

选择Laravel开发项目是因为其灵活性和强大功能适应不同规模和复杂度的需求。Laravel提供路由系统、EloquentORM、Artisan命令行等功能,支持从简单博客到复杂企业级系统的开发。

Laravel 提供了一个全面的 Auth 框架,用于实现用户登录功能,包括:定义用户模型(Eloquent 模型)创建登录表单(Blade 模板引擎)编写登录控制器(继承 Auth\LoginController)验证登录请求(Auth::attempt)登录成功后重定向(redirect)考虑安全因素:哈希密码、防 CSRF 保护、速率限制和安全标头。此外,Auth 框架还提供重置密码、注册和验证电子邮件等功能。详情请参阅 Laravel 文档:https://laravel.com/doc
