shopro商城队列配置方法

作者:管理员 浏览数:268 发布时间:2024-08-22

1、注意事项

请不要将缓存驱动配置为 redis,否则会出现 Function Redis::delete() is deprecated 错误。如果缓存驱动是redis,请将队列的 redis 配置和 redis 的配置的 select (redis db 库) 设置成一样的,并且绝对不能和 cache 的 select (redis db 库) 一样,否则 fastadmin 后台右上角 清除缓存 将把所有缓存清除,包括队列任务。

2、普通优先级和高优先级两个队列监听都必须要配置

3、php 必须要安装 redis 扩展

安装完redis 请一定记得重启 nginx 服务

4、队列配置

为了提高系统性能,灵活性,将 订单自动关闭时间,自动确认时间,自动评价时间,以及 订单支付完成后续事件都放到队列异步处理,请务必配置队列

安装队列 composer 包 (最新版的 fastadmin 已经预装)

如果依赖安装中已安装,这一步可以忽略

composer require topthink/think-queue:v1.1.6

5、配置队列

建议使用 redis 驱动。没有配置文件,请手动创建如下文件

application/extra/queue.php

<?php

return [

           // 队列驱动使用 redis 推荐, 可选 database

    'connector' => 'redis',   

           // redis 主机地址

    'host' => '127.0.0.1',       

           // redis 密码

    'password' => '',             

           // redis 端口

    'port' => 6379,               

           // redis db 库, 建议显示指定 1-15 的数字均可,如果缓存驱动是 redis,避免和缓存驱动 select 冲突

    'select' => 1,                   

           // redis 超时时间

    'timeout' => 0,               

           // redis 持续性,连接复用

    'persistent' => false,       

];

6、php 安装 redis 扩展(驱动是 redis时必须安装)

宝塔安装方式

SHOPRO商城队列配置

7、配置队列监听

命令行调试,可排查 supervisor 无法启动的错误

部分小伙伴宝塔 supervisor 按照文档配置好之后,总是出现无法启动的情况,一般情况是宝塔默认禁用了 php 部分函数,需要手动删除被禁用的函数,请点击查看依赖安装删除禁用函数

按照如下方式排查:

进入项目目录,cd /www/wwwroot/项目目录     // 这是宝塔默认项目目录,请自行进入自己的项目目录

执行(该进程会一直监听):php think queue:listen --queue=shopro-high

前端下单并支付(可以余额支付),之后看看命令会出现报错的打印结果,自行根据报错结果解决问题

解决之后将进程按 ctrl + c 结束,并执行如下命令更新项目权限,避免因为刚才执行命令导致的权限错误

 chown -R www:www /www/wwwroot/项目目录

 再去宝塔重新启动 supervisor 进程

8、宝塔面板配置,仅支持 linux【推荐】

请在宝塔面板,软件商店,搜索并安装 supervisor

shopro商城队列配置

9、为保证高优先级的执行效率,需要配置两个队列监听进程

(1)高优先级队列启动命令

php think queue:listen --queue shopro-high

(2)普通优先级队列启动命令

php think queue:listen --queue shopro

使用 supervisor 做进程守护,如果不是宝塔环境,仅支持 linux【推荐】,请自行安装 supervisor 软件

10、配置 supervisor

注意将下面的 command 和 directory 配置为自己的目录

(1)普通队列

[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

(2)高优先级队列

[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 驱动,如果切换队列驱动,请保证现有队列已经全部执行完毕,否则现有队列任务全部会丢失。