laravel创建定时任务,消费队列

21 篇文章 0 订阅
5 篇文章 0 订阅

即上一次写了一个简单的队列的逻辑,要把它放到实际应用的框架里,才是真靠谱的,今儿就用laravel5.5框架,学习了一下如何把队列的逻辑放到框架里实际应用起来

1、进入laravel框架根目录,执行命令:php artisan make:command OrderCommand
执行命令会在根目录app/console/commands/下创建一个OrderCommand文件,console 目录是存放创建的任务用的,那么这个命令自然而然就是创建任务和调度

2、进入OrderCommand任务文件,修改任务名称,具体干嘛的我写注释里了

    /**
     * The name and signature of the console command.
     *
     * @var string
     * @info 这是执行任务的名称,在调用的时候使用
     */
    protected $signature = 'command:order';

3、进入OrderCommand任务文件,修改任务描述,这个就是协同工作的时候的一个描述,方便大家都明白这个干嘛的解释


    /**
     * The console command description.
     *
     * @var string
     * @info 描述
     */
    protected $description = '订单处理';

4、进入OrderCommand任务文件,编写业务逻辑

/**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        while ( true )
        {
            $a = Redis::rpop('order_mq');
            if ( $a )
            {
                //这个地方是执行业务逻辑的地方
                $arrOrder = json_decode($a,true);
                DB::table('order')->insert($arrOrder);
            }
            else
            {
                usleep(20000);//这里意思是如果这个队列中没有东西,等待两秒
            }

        }
    }

我这里写的就是一个消费的队列。

5、修改console下的kernel.php,命令调度的类

    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
        \App\Console\Commands\OrderCommand::class,
    ];

这里后面如果还有添加其他任务就在后面继续添加类的地址

6、修改console下的kernel.php,修改任务执行的频率

/**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
         $schedule->command('order')
                  ->everyMinute();
    }

6、如何测试任务逻辑是否正确
因为在任务文件中不能按照常规方法进行测试,laravel 提供了方法在终端执行命令:php artisan command:order 这个command:order就是2里面的任务名称,所以2里面怎么定的这个里怎么执行。测试修改完成说明这个任务可以调度了,这里单独说一下,测试完毕一定要Control+c一下退出,要不然进程会一直执行下去,给测试带来没有必要的麻烦。

7、crontab添加定时任务
crontab -l 查已有定时任务列表
crontab -e 添加定时任务
* * * * * php /Users/lf/wwwroot/laravel/artisan command:order >> /dev/null 2>&1
上面五个星星代表:分,时,日,周 后面的就上上面测试时候使用的命令,只不过使用artisan这个命令这里要写绝对路径,因为artisan是这个框架里的命令,另外要说一下php这个命令你在用的时候发现没有执行,那么修改为php的绝对路径,再试一下

8、在整体使用的过程中遇见的问题
说明一下我本地是mac系统,在整套逻辑中,安这个流程走一般是不会出问题的,但是我在最后都测试完毕的时候出现了问题,在cron执行完以后我无法关闭这个cron,我把数据库清空,再把队列加入数据,还会继续往数据库中写入数据直到队列没有数据为止。那么这里问题来了,该如何关闭cron,我在网上查了很多的例子,有的说使用sudo cron stop,有的说杀死程序。这些办法都不能解决。包括我进入crontab 删掉这个任务,依然无法停止,简直就是很神奇。最后我删掉了任务,重启了电脑才最终让它停下来。但是具体为什么不还不的而知,先说一下cron是一个特殊的存在,大概是它是不能停下来的,但是我看网上说linux系统的cron可能停止。,回头我部署到linux系统再试一下,看看如何。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值