lumen 队列处理

数据库
要使用 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 App\Jobs;
use Illuminate\Support\Facades\Log;
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:*
上一篇:supervisor


下一篇:php – laravel 5.5电子邮件通知不更新内容