Laravel队列

连接 Vs. 队列

在开始使用 Laravel 队列前,弄明白 「连接」 和 「队列」 的区别是很重要的。在你的 config/queue.php 配置文件里,有一个 connections 配置选项。这个选项给 Amazon SQS,Beanstalk,或者 Redis 这样的后端服务定义了一个特有的连接。不管是哪一种,一个给定的连接可能会有多个 「队列」,而 「队列」 可以被认为是不同的栈或者大量的队列任务。

 

要注意的是,queue 配置文件中每个连接的配置示例中都包含一个 queue 属性。这是默认队列任务被发给指定连接的时候会被分发到这个队列中。换句话说,如果你分发任务的时候没有显式定义队列,那么它就会被放到连接配置中 queue 属性所定义的队列中:

 

生成任务类

php artisan make:job Test

任务类结构

任务类的结构很简单,一般来说只会包含一个让队列用来调用此任务的 handle 方法。

class Test 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()

    {

        //

    }

}

分发任务

一旦你写完了你的任务类你就可以使用它自带的 dispatch 方法分发它。传递给 dispatch 方法的参数将会被传递给任务的构造函数:

$this->dispatch(new \App\Jobs\Test(date('Y-m-d H:i:s')));

延迟分发

如果你想延迟你的队列任务的执行,你可以在分发任务的时候使用 delay 方法。例如,让我们详细说明一个十分钟之后才会执行的任务:

$job = (new SendReminderEmail($user))->delay(60 * 10);

启动队列侦听器

Laravel 引入了一个 Artisan 命令,用来运行被推送到队列里的任务。你可以通过 queue:listen 命令来运行侦听器:

/var/www/erp# php artisan queue:listen