数据库
要使用 database 队列驱动,你需要数据表保存任务信息(比如失败任务)。要生成创建这些表的迁移,
可以在项目目录下运行 Artisan 命令 queue:table,迁移被创建之后,可以使用 migrate 命令生成这些表:
php artisan make:migration create_jobs_table --create=jobs
php artisan queue:table
php artisan queue:failed_jobs
php artisan migrate
运行后生成failed_jobs、jobs、migrations三张表。
队列的配置选项都在 .env
文件中。
如果您想要完全自定义队列的配置,您必须将 vendor/laravel/lumen-framework/config/queue.php
文件完整的复制到你的项目根目录中的 config
目录,并且要调整必要的配置。如果 config
目录不存在,则要创建。
.env 中需要修改
QUEUE_CONNECTION=database
注意,如果不修改这个配置的话,job 就不会存入数据表,而是同步执行。
创建Jobs/TestJob.php
<?php namespace AppJobs; use IlluminateSupportFacadesLog; class TestJob extends Job { protected $str; /** * Create a new job instance. * * @return void */ public function __construct($str) { $this->str=$str; } /** * 执行任务 * * @return void */ public function handle() { echo "hello job"; Log::info("Job:".$this->str); } /** * 任务失败的处理过程 * * @param Exception $exception * @return void */ public function failed(Exception $exception) { // 给用户发送任务失败的通知,等等…… } }
在控制里里调用队列
dispatch(new TestJob('this is job'));
到这里已经在数据插入到数据库了
要怎么动行队列里的任务呢
运行队列处理器
php artisan queue:work
Tip:要使 queue:work
进程一直在后台运行,你应该使用进程管理器比如 Supervisor 来确保队列处理器不会停止运行
配置 Supervisor
Supervisor 的配置文件通常位于 /etc/supervisor/conf.d
目录下。在该目录中,你可以创建任意数量的配置文件,用来控制 supervisor 将如何监控你的进程。例如,创建一个 laravel-worker.conf
文件使之启动和监控一个 queue:work
进程:
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 autostart=true autorestart=true user=forge numprocs=8 redirect_stderr=true stdout_logfile=/home/forge/app.com/worker.log
在这个例子中,numprocs
指令将指定 Supervisor 运行 8 个 queue:work
进程并对其进行监控,如果它们挂掉就自动重启它们。你应该更改 command
选项中的 queue:work sqs
部分以表示你所需的队列连接。
启动 Supervisor
配置文件创建完毕后,你就可以使用如下命令更新 Supervisor 配置并启动进程了:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*