laravel5.4队列Demo

第一步:.env文件中设置队列驱动为database,认sync是直接执行,并不是异步队列。


QUEUE_DRIVER=database

第二步:创建保存队列的表jobs


PHP artisan queue:table     //生成数据库队列的(laravel 5.2和5.4字段有差异)
PHP artisan queue:Failed-table  //处理失败的队列
migrationPHP artisan migrate  //创建该数据库队列表

第三步:运行Artisan命令,生成任务类,/app/Jobs/SendReminderEmail.PHP


PHP artisan make:job SendReminderEmail


代码如下:

<?PHP

namespace App\Jobs;

use App\User;
use App\Jobs\Job;
use Illuminate\Support\Facades\Log;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendReminderEmail extends Job implements ShouldQueue, SelfHandling
{
    use InteractsWithQueue, SerializesModels;
        protected $data;
    /**
     * 创建一个新的任务实例
     *
     * @param  User  $user
     * @return void
     */
    public function __construct($data)
    {
            $this->data = $data;
    }

    /**
     * 执行任务
     *
     * @param  Mailer  $mailer
     * @return void
     */
    public function handle()
    {
            //Log::info($this->data);
        Log::info('往日志文件里写信息!');
    }
    /**
         * The job Failed to process.
         *
         * @param  Exception  $exception
         * @return void
         */
        public function Failed(Exception $exception)
        {
            // Send user notification of failure, etc...    
        }
}

第四步:创建控制器,加入队列。/app/Http/Controllers/UserController.PHP

<?PHP

namespace App\Http\Controllers;

use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Jobs\SendReminderEmail;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;

class UserController extends Controller{
    public function index(){
        Log::info('This is a log demo!');
    }
    /**
     * 发送提醒邮件到指定用户
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function sendReminderEmail($id)
    {
        $user = User::findOrFail($id);
        $job = (new SendReminderEmail($user))
            ->delay(Carbon::Now()->addMinutes(1));

        $this->dispatch($job);
    }
}

如果成功会在jobs表有条队列数据。queue认default,可以调用onQueue('队列名'),指定队列名称

laravel 5.2的表,5.4里去除了reserved字段。

第五步:启用任务队列


PHP artisan queue:listen


相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...