form1.cn
Make a little progress every day

Laravel5.6中的队列简单使用

20th of December 2018 PHP Laravel 839

Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间。


实现一个例子,通过这个例子你会明白laravel队列是怎么回事:


1,来一张数据表来存储任务,jobs

php artisan queue:table
php artisan migrate


2,在来一张队列任务失败的存放表,failed_jobs

php artisan queue:failed-table
php artisan migrate


3,查看配置文件

队列配置文件存放在 config/queue.php 文件中。每一种队列驱动的配置都可以在该文件中找到,包括数据库, Beanstalkd, Amazon SQS, Redis,以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动用于那些放弃队列的任务。

开发的时候 .env QUEUE_DRIVER=sync 可以即时看到执行结果,生产环境 QUEUE_DRIVER=database 会存到队列表


4,生成任务类

php artisan make:job ProcessPodcast

队列的任务类都默认放在 app/Jobs 目录下

类代码:

<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\DB;
class ProcessPodcast implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    private $data; 
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }
    /**
     * 执行任务。
     *
     * @return void
     */
    public function handle()
    {
        $data = $this->data;
        DB::table('zwotu')->insert($data); 
    }
    /**
     * 执行失败的任务。
     *
     * @param  Exception  $exception
     * @return void
     */
    public function failed(Exception $exception)
    {
        // 给用户发送失败的通知等等...
    }
}


5,分发任务,在你的控制器中调用

$data = ['content' => 'conte1111t'];
$job = (new ProcessPodcast($data))->dispatch($data)->delay(now()->addMinutes(1)); //延迟1分钟调用


6,运行队列处理器

php artisan queue:work --tries=3  #tries:失败后尝试重试的次数,次数超出会存在失败表failed_jobs中


7,去运行你分发任务的控制器


8,观看你的任务执行结果和jobs表


9,一个简单的队列任务完成


更多使用参考以下网址:

https://laravel-china.org/docs/laravel/5.7/queues/2286

https://baijiahao.baidu.com/s?id=1589562735594469778&wfr=spider&for=pc

https://laravel-china.org/articles/3729/use-laravel-queue-to-understand-the-knowledge