关于定时任务的一些杂谈

关于定时任务的一些步骤。
前几天写了个队列来实现运营定时推送任务的功能,被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 协议》,转载必须注明作者和本文链接
我家有猫了
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 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天前 评论

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