Laravel 队列基本使用

  • 标签: Laravel Redis
  • 发表时间:2020年03月17日
  • 作者:hhao
  • 浏览次数:513

laravel的队列为各种不同的队列后端(Amazon SQS、Redis)或关系数据库提供了统一的API。 队列一般用来处理对及时性要求不高的业务,(发送电子邮件),延迟这些任务可以极大的提升web的请求响应速度。

配置laravel队列(Redis)

  1. 在文件 config/database.php 中配置队列的 redis connection
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    */

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],
        //异步处理事件队列
        'queue' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 3,
        ],

    ],

];

  1. 然后在 config/quene.php文件中指定redis的Queue Connection Name
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Queue Connection Name
    |--------------------------------------------------------------------------
    */

    'default' => env('QUEUE_CONNECTION', 'sync'),

    /*
    |--------------------------------------------------------------------------
    | Queue Connections
    |--------------------------------------------------------------------------
    */

    'connections' => [

       .... 
 
        'redis' => [
            'driver' => 'redis',
            'connection' => 'queue', //config/database.php 中的redis connection
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
        ],

    ],

];

3.在.env文件中配置redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
//将sync改为redis
QUEUE_CONNECTION=redis

4.生成任务类,默认情况下应用的对列任务都在app/jobs目录下。

//使用Artisan命令生成新的队列任务

php artisan make:job ProcessPodcast

5.使用onQueue方法调用指定队列

ProcessPodcast::dispatch($podcast)->onQueue('processing');

服务器Supervisor配置

安装 Supervisor

Supervisor 是一个用于 Linux 操作系统的进程监视器,如果 queue:work 进程失败,它将自动重启该进程。要在 Ubuntu 上安装 Supervisor,你可以使用以下命令:

sudo apt-get install 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 artisan queue:work --queue= //指定queue
directory=  //指定项目目录
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/wwwlogs/laravel-worker.log  //指定日志文件

启动 Supervisor

创建了配置文件后,你可以使用以下命令更新 Supervisor 配置并启动进程:

supervisorctl status //查看队列状态

supervisorctl start  //启动队列

supervisorctl reload //重启队列

supervisorctl stop  //停止

更多请参考内容 Laravel-文档

评论