💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 队列配置 文档最后更新时间:2021-12-16 16:38:06 ### 注意事项 **请不要将缓存驱动配置为 redis,会出现`Function Redis::delete() is deprecated`错误** **如果缓存驱动是redis,请将队列的 redis 配置和 redis 的配置的 select (redis db 库) 设置成一样的,并且绝对不能和 cache 的 select (redis db 库) 一样,否则 fastadmin 后台右上角 清除缓存 将把所有缓存清除,包括队列任务** **普通优先级和高优先级两个队列监听都必须要配置** **php 必须要安装 redis 扩展** **安装完redis 请一定记得重启 nginx 服务** * * * ### 队列配置 * 为了提高系统性能,灵活性,将 订单自动关闭时间,自动确认时间,自动评价时间,以及 订单支付完成后续事件都放到队列异步处理,请务必配置队列 #### 安装队列 composer 包 (最新版的 fastadmin 已经预装) > 如果依赖安装中已安装,这一步可以忽略 ~~~ composer require topthink/think-queue:v1.1.6 ~~~ #### 配置队列,建议使用 redis 驱动 ~~~ 安装好之后会自动创建配置文件 编辑 application/extra/queue.php 'connector' => 'redis', // 队列驱动使用 redis 推荐, 可选 database 'host' => '127.0.0.1', // redis 主机地址 'password' => '', // redis 密码 'port' => 6379, // redis 端口 'select' => 1, // redis db 库, 建议显示指定 1-15 的数字均可,如果缓存驱动是 redis,避免和缓存驱动 select 冲突 'timeout' => 0, // redis 超时时间 'persistent' => false, // redis 持续性,连接复用 ~~~ #### php 安装 redis 扩展(驱动是 redis时必须安装) ##### 宝塔安装方式 ![](https://img.kancloud.cn/bd/cb/bdcb30af030d40c363eab35b753a4713_639x334.png) ### 配置队列监听 #### 命令行调试 > 可排查 supervisor 无法启动的错误 部分小伙伴宝塔`supervisor`按照文档配置好之后,总是出现无法启动的情况,一般情况是宝塔默认禁用了 php 部分函数,需要手动删除被禁用的函数,请点击查看[依赖安装](https://doc.fastadmin.net/shopro/357.html)删除禁用函数 按照如下方式排查 ~~~ 进入项目目录 cd /www/wwwroot/项目目录 // 这是宝塔默认项目目录,请自行进入自己的项目目录 执行(该进程会一直监听) php think queue:listen --queue=shopro-high 前端下单并支付(可以余额支付),之后看看命令会出现报错的打印结果,自行根据报错结果解决问题 解决之后将进程按 ctrl + c 结束,并执行如下命令更新项目权限,避免因为刚才执行命令导致的权限错误 chown -R www:www /www/wwwroot/项目目录 去宝塔重新启动 supervisor 进程 ~~~ #### 宝塔面板配置,仅支持 linux【推荐】 > 请在宝塔面板,软件商店,搜索并安装 supervisor ![](https://img.kancloud.cn/77/60/77607c6a79d90ba75ddf9ce337cfe602_962x598.png) 为保证高优先级的执行效率,需要配置两个队列监听进程 ~~~ 高优先级队列启动命令 php think queue:listen --queue shopro-high 普通优先级队列启动命令 php think queue:listen --queue shopro ~~~ #### 使用 supervisor 做进程守护,如果不是宝塔环境,仅支持 linux【推荐】 请自行安装 supervisor 软件 配置 supervisor ~~~ 注意将下面的 command 和 directory 配置为自己的目录 // 普通队列 [program:shopro] process_name=%(program_name)s_%(process_num)02d command=/usr/bin/php /www/wwwroot/项目目录/think queue:listen --queue shopro directory=/www/wwwroot/项目目录 numprocs=1 autostart=true autorestart=true user=www redirect_stderr=true stdout_logfile=/var/log/supervisor/shopro.log stderr_logfile=/var/log/supervisor/shopro_err.log // 高优先级队列 [program:shopro-high] process_name=%(program_name)s_%(process_num)02d command=/usr/bin/php /www/wwwroot/项目目录/think queue:listen --queue shopro-high directory=/www/wwwroot/项目目录 numprocs=1 autostart=true autorestart=true user=www redirect_stderr=true stdout_logfile=/var/log/supervisor/shopro-high.log stderr_logfile=/var/log/supervisor/shopro-high_err.log ~~~ #### 简单方式,不安装 supervisor 【不推荐】 > 没有启动守护进程,命令可能异常终止,需要时刻关注队列监听进程是否还在运行 ~~~ 命令格式: nohup sudo -u [php-fpm 执行用户|www] [php命令地址|/usr/bin/php] [think命令地址|/www/wwwroot/shopro/think] queue:listen >> /tmp/shopro.output 2>&1 & 示例: // 普通队列 nohup sudo -u www /usr/bin/php /www/wwwroot/shopro/think queue:listen --queue=shopro >> /tmp/shopro.output 2>&1 & // 高优先级队列 nohup sudo -u www /usr/bin/php /www/wwwroot/shopro/think queue:listen --queue=shopro-high >> /tmp/shopro.output 2>&1 & ~~~ #### 注意事项 * 建议使用 redis 驱动 * 如果切换队列驱动,请保证现有队列已经全部执行完毕,否则现有队列任务全部会丢失 * * * ### 分割线 * * * ### 【请不要配置缓存驱动为 redis】 缓存使用 redis 驱动时是这个样子的 #### 注意事项 > 缓存配置 redis 之后,可以提高系统性能,但是会带来一些影响,必须要注意 * cache 如果用 redis ,请将缓存配置的 select 库设置成和 队列以及活动不一样的 select 库 * 因为 thinkphp 版本问题,可能会报 Function Redis::delete() is deprecated 错误,请自行百度解决 ~~~ application/config.php 文件 'cache' => [ 'type' => 'Redis', // 这里配置了 redis 驱动,默认是 File ... ], ~~~