QQ扫一扫联系
队列的目的是将耗时的任务延时处理,比如发送邮件、文档转换处理等,从而大幅度缩短 Web 请求和响应的时间。
队列配置文件存放在 config/queue.php。每一种队列驱动的配置都可以在该文件中找到,包括数据库、Beanstalkd、Amazon SQS、Redis以及同步(本地使用)驱动。
① 生成数据库队列表迁移文件
在执行该步骤前,请先检查迁移文件
database/migrations/xxxx_xx_xx_xxxxxx_create_jobs_table.php
是否存在,如果已存在直接跳过第①步
# 运行该命令之前请检查是否存在迁移文件 database/migrations/xxxx_xx_xx_xxxxxx_create_jobs_table.php
# 如果存在直接跳过该步骤
php artisan queue:table
# 运行该命令之前请检查是否存在迁移文件 database/migrations/xxxx_xx_xx_xxxxxx_create_failed_jobs_table.php
# 如果存在直接跳过该步骤
php artisan queue:failed-table
这一步会生成数据库迁移文件
database/migrations/xxxx_xx_xx_xxxxxx_create_jobs_table.php
和database/migrations/xxxx_xx_xx_xxxxxx_create_failed_jobs_table.php
② 执行数据库迁移文件
php artisan migrate
③ 在 .env
文件配置队列驱动为数据库
QUEUE_DRIVER=database
QUEUE_CONNECTION=database
④ 运行队列进程测试运行
如果队列中有任务,以下命令会自动执行一个任务,查看是否报错,无报错表示配置成功
Laravel5
/xxx/bin/php /www/example.com/artisan queue:work database --queue=default --sleep=3 --tries=1 --timeout=86400
/xxx/bin/php
替换成 PHP 的运行路径,通常为 /usr/bin/php
default
为队列名称,默认为 default
,还有其他队列如文档转换 FileConvert
Laravel9
/xxx/bin/php /www/example.com/artisan --queue=default queue:work database --once --sleep=3 --tries=1 --timeout=86400
/xxx/bin/php
替换成 PHP 的运行路径,通常为 /usr/bin/php
default
为队列名称,默认为 default
,还有其他队列如文档转换 FileConvert
① 修改 .env
文件,配置 Redis 连接信息
REDIS_HOST=x.x.x.x
REDIS_PASSWORD=yourpassword
REDIS_PORT=6379
② 在 .env
文件配置队列驱动为 Redis
QUEUE_DRIVER=redis
QUEUE_CONNECTION=redis
③ 运行队列进程测试运行
如果队列中有任务,以下命令会自动执行一个任务,查看是否报错,无报错表示配置成功
Laravel5
/xxx/bin/php /www/example.com/artisan queue:work redis --queue=default --sleep=3 --tries=1 --timeout=86400
/xxx/bin/php
替换成 PHP 的运行路径,通常为 /usr/bin/php
default
为队列名称,默认为 default
,还有其他队列如文档转换 FileConvert
Laravel9
/xxx/bin/php /www/example.com/artisan --queue=default queue:work redis --once --sleep=3 --tries=1 --timeout=86400
/xxx/bin/php
替换成 PHP 的运行路径,通常为 /usr/bin/php
default
为队列名称,默认为 default
,还有其他队列如文档转换 FileConvert
如果你使用的是 ssh 运行的队列进程,当 ssh 连接断开时,该进程会自动停止。
Supervisor 是 Linux 系统中常用的进程守护程序,如果队列进程 queue:work 意外关闭,它会自动重启启动队列进程。
Supervisor 参考配置
Laravel5
[program:queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=/xxx/bin/php /www/example.com/artisan queue:listen database --sleep=5 --memory=4096 --tries=1 --timeout=86400
autostart=true
autorestart=true
user=www
numprocs=1
redirect_stderr=true
stdout_logfile=/tmp/worker.log
/xxx/bin/php
替换成 PHP 的运行路径,通常为 /usr/bin/php
default
为队列名称,默认为 default
,还有其他队列如文档转换 FileConvert
command
表示执行的命令user
表示启动进程的用户numprocs
可以控制队列进程的数量,即同时执行的任务数Laravel9
[program:queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=/xxx/bin/php /www/example.com/artisan queue:work database --queue=default --sleep=3 --tries=1 --timeout=86400
autostart=true
autorestart=true
user=www
numprocs=1
redirect_stderr=true
stdout_logfile=/tmp/worker.log
/xxx/bin/php
替换成 PHP 的运行路径,通常为 /usr/bin/php
default
为队列名称,默认为 default
,还有其他队列如文档转换 FileConvert
command
表示执行的命令user
表示启动进程的用户numprocs
可以控制队列进程的数量,即同时执行的任务数