- 首先安装predis扩展 :composer require predis/predis
- 队列的配置信息储存于
config/queue.php
文件中,在这个文件中你会发现框架所支持的队列驱动的配置连接示例。这些驱动包括:数据库,Beanstalkd,Amazon SQS,Redis,和一个同步(本地使用)的驱动。还有一个名为null
的驱动表明不使用队列任务。 - 咱们这里所用的是 redis 驱动,所以一下只是对于redis驱动来示范的。
- 接下来我们还需要修改环境变量
QUEUE_DRIVER
的值为redis
: 修改 .env 文件
QUEUE_DRIVER=redis - 为了使用
redis
队列驱动,你需要在你的配置文件config/database.php
中配置 Redis 的数据库连接。如果你的 Redis 队列连接使用的是 Redis 集群,你的队列名称必须包含 key hash tag。这是为了确保所有的 Redis 键对于一个给定的队列都置于同一哈希中:'redis' => ['client' => 'predis','default' => ['host' => env('REDIS_HOST', '127.0.0.1'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => 0,], ], 这里我没做任何修改,还是用框架默认的配置格式。
生成一个任务类:php artisan make:job CreateAdminUsers
在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。
生成的类实现了
Illuminate\Contracts\Queue\ShouldQueue
接口,这意味着这个任务将会被推送到队列中,而不是同步执行。任务类的结构如下所示:这个任务类,我只是写了一个向数据表admin_users添加数据的方法。咱们主要是了解队列的使用,handle方法里面的逻辑,根据自己的所需。自行开发即可。
<?phpnamespace App\Jobs;use App\Entities\AdminUsers; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable;class CreateAdminUsers implements ShouldQueue {use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;private $params = [];/*** Create a new job instance.** @return void*/public function __construct($params){$this->params = $params;}/*** Execute the job.** @return void*/public function handle(){$result = AdminUsers::create(['username' => $this->params['username'],'phone' => $this->params['phone'],'password' => $this->params['password'],]);var_dump($result);} }
有时候队列中的任务会失败。Laravel 内置了一个方便的方式来指定任务重试的最大次数。当任务超出这个重试次数后,它就会被插入到
failed_jobs
数据表里面。我们可以使用
queue:failed-table
命令来创建failed_jobs
表的迁移文件,执行:php artisan queue:failed-table 会新建database/migrations/{timestamp}_create_failed_jobs_table.php
文件接着使用
migrate
Artisan 命令生成failed_jobs
表,执行:php artisan migrate开始任务分发,我是在控制器中,写了一个简单的测试方法,如下:
public function index(Request $request){$params = ['username' => '王五','phone' => '1344444444','password' => '$2y$10$yoOslZ7mlMUmv1SCZhh/rubAgH5.4qxpHSt78eTQ3G5L3J4uDDOhW',];dispatch(new CreateAdminUsers($params))->delay(Carbon::now()->addMinutes(1)); }
开始测试,开始之前,我们需要在命令行启动队列系统,队列在启动完成后会进入监听状态:php artisan queue:listen
14.数据表admin_users表已有的数据如下:
15.通过路由咱们访问一下控制器,让队列开始执行。执行后的数据表就会多一条数据。
可以看到自增ID已经到471了,因为在写这篇文章之前,已经做了好几次测试。为了方便大家看,中间的数据,我手动删除了。