laravel 队列支持:

"sync", "database", "beanstalkd", "sqs", "redis", "null"

先用database测试

修改.env

QUEUE_CONNECTION=database

配置数据库模式的环境,原理保存在数据库,执行完成之后就删除了

Laravel Jobs笔记_php

php artisan queue:table
php artisan migrate

生成上图展示的数据库jobs

创建一个job

php artisan make:job test
<?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;

class test implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public $data;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($data=[])
{
$this->data = $data;
$this->delay(6);
//
}

/**
* Execute the job.
*
* @return void
*/
public function handle()
{
var_dump($this->data);
}
}

两种方式:
添加一个job到队列中

dispatch(new \App\Jobs\test('我是队列的参数'));
test::dispatch('我是队列的参数');

上面就能跑通了,但是有时候会处理异常的情况

php artisan queue:failed-table
php artisan migrate

启动的时候有尝试的值,为如果失败了,会再次执行

php artisan queue:work --sleep=3 --tries=3

三秒后再次尝试

如果不加tries 则会一直不断的循环

发现了有错误,修改了bug ,想让这个队列再跑一次

这个id 为失败的id

php artisan queue:retry 1

如果想所有的错误都跑一遍则用all

php artisan queue:retry all