关于定时任务的一些杂谈

关于定时任务的一些步骤。
前几天写了个队列来实现运营定时推送任务的功能,被leader喷了,原话是laravel的队列性能不好。于是请教了另一位前辈,据说,只需把laravel的队列实现底层逻辑由数组改为双向链表即可。我寻思着,那我特么还不如改定时!

  1. 创建定时文件
    #生成定时任务的文件
    php artisan make:command JPushJobs

    注意:创建文件一般为make语句,用php artisan查看,创建定时任务:make:command 创建队列:make:job 创建事件:make:event 创建控制类:make:controller 生成频道:make:channel 等等

生成的定时文件内容如下所示

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class JPushJobs extends Command
{
    /**
     * The name and signature of the console command.这里为定时任务的签名,根据这里的定义调用定时任务为:php artisan j-push:jobs
     *
     * @var string
     */
    protected $signature = 'j-push:jobs';

    /**
     * The console command description.这里是在php artisan里的命令描述
     *
     * @var string
     */
    protected $description = '后台定时推送的任务';
    protected $pushInfoService;

    /**
     * Create a new command instance.
     * JPushJobs constructor.
     * @param PushInfoService $pushInfoService
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
       //此处增加相关处理逻辑
    }
}
  1. 将定时任务加入Kernel管理
    在Kernel.php文件中加入上一步定义好的定时任务,如下

    // 每分钟执行一次任务
    $schedule->command('j-push:jobs')->everyMinute();

    注意:command里放定时任务的签名,即定时任务中$signature的定义。其中everyMinute()表示此任务每分钟执行一次,如果是其他时间可以用其他方法,比如 每小时执行一次hourly()、每天凌晨4点执行一次dailyAt('4:00')、自定义比如每两小时执行一次cron('0 */2 * * *')

  2. 也可以直接将定时任务放入linux的定时任务管理
    命令后crontab -e进入定时任务管理脚本,然后加入管理语句

#将/your-project替换成你的项目目录
*/1 * * * * php /your-project/artisan j-push:jobs

注意:定时任务是一个挂载在后台的独立的进程,不需要像队列一样在方法中调用

本作品采用《CC 协议》,转载必须注明作者和本文链接
我家有猫了
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

骚,$schedule->command('j-push:jobs')->everyMinute();*/1 * * * * php /your-project/artisan j-push:jobs 真骚,

3年前 评论
Imuyu (作者) 3年前
小胖子呀萌萌哒 (楼主) 3年前
小胖子呀萌萌哒 (楼主) 3年前
小胖子呀萌萌哒 (楼主) 3年前

laravel 队列的性能还可以吧,没听说过不好的

3年前 评论
小胖子呀萌萌哒 (楼主) 3年前
Imuyu 3年前

定时推送任务 ,既然是定时任务,考量队列性能的标准是神马呢? 这个需求和队列貌似没啥关系,我理解的队列是异步和解决请求和处理的速度差异,这个需求用定时任务合理。

3年前 评论
小胖子呀萌萌哒 (楼主) 3年前

延时任务队列配合redis的有序集合比较好,

3年前 评论

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