美文网首页程序员
Laravel 5.2 Queue队列基于Windows实现

Laravel 5.2 Queue队列基于Windows实现

作者: 解小北 | 来源:发表于2018-04-26 19:11 被阅读0次

场景

  1. 需要耗时的任务

  2. 为了保证送达率,出错后需要重试的任务

配置

底层配置文件是config/queue.php

如果是用数据库database作队列驱动,就需要一张数据表来存放任务,这些操作都可以使用laravel的数据迁移完成

php artisan queue:table

php artisan migrate

.env文件中设置队列驱动为数据库

QUEUE_DRIVER=database

编写任务类

运行以下命令将会在app/Jobs目录下生成一个新的类

php artisan make:job MyJob

打开新创建的类app/Jobs/MyJob

<?php

namespace App\Jobs;

use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;

class MyJob extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('队列测试'.date('Y-m-d h:i:s',time()));
    }
}

handle方法在任务被队列处理的时候被调用,注意我们可以在任务的handle方法中进行依赖注入。

推送任务到队列

默认的 Laravel 控制器app/Http/Controllers/Controller.php使用了DispatchesJobs trait。所以继承的类中可以直接使用推送任务到队列的方法dispatch方法

<?php

namespace App\Http\Controllers\Home;

use App\Jobs\MyJob;
use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index(){
        //推送队列
        $result = $this->dispatch(new MyJob());
        dd($result);
    }

}

至此一个队列服务demo就完成了,在浏览器访问路由,队列就会被保存在数据库中



那么接下来如何运行队列中的任务呢?

运行队列监听器

php artisan queue:work --daemon

直接运行该命令即可继续队列中的任务
查看日志storage/logs/laravel.log,测试成功

[2018-04-26 08:27:05] local.INFO: 队列测试2018-04-26 08:27:05

Windows定时任务

创建一个.bat文件,写入队列监听的命令

d:
cd D:\WWW\demo
php artisan queue:work --daemon

输入win+R 然后输入 taskschd.msc 进入定时任务设置界面,创建
启动程序一栏填入.bat脚本路径即可

相关文章

网友评论

    本文标题:Laravel 5.2 Queue队列基于Windows实现

    本文链接:https://www.haomeiwen.com/subject/xcymlftx.html