关于fastadmin的shopro的 队列安装方式

FastAdmin队列配置与Redis注意事项
文章讲述了在使用FastAdmin框架时,配置队列和Redis需要注意的事项,包括不要将缓存驱动设为Redis以避免特定错误,队列和缓存的Redis数据库选择应区分,安装Redis扩展并重启服务,以及如何配置和使用Supervisor进行进程守护。同时强调了高优先级和普通优先级队列的监听配置和避免数据丢失的方法。

队列配置
注意事项
请不要将缓存驱动配置为 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

<?php
return [
    '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时必须安装)
宝塔的安装方式略…

配置队列监听

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

按照如下方式排查

进入项目目录
cd /www/wwwroot/项目目录 // 这是宝塔默认项目目录,请自行进入自己的项目目录
执行(该进程会一直监听)

php think queue:listen --queue=shopro-high

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

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

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

去宝塔重新启动 supervisor 进程

宝塔面板配置,仅支持 linux【推荐】
请在宝塔面板,软件商店,搜索并安装 supervisor

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

高优先级队列启动命令

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
    ...
],
FastAdmin Shopro 商城系统中,监听订单失效事件通常涉及定时任务和事件监听机制的实现。Shopro 作为一个基于 FastAdmin 框架的商城系统,提供了良好的扩展性,可以通过自定义逻辑来实现订单状态的更新和事件触发。 ### 实现监听订单失效的基本思路 1. **订单失效的定义** 通常订单失效是指用户未在指定时间内完成支付,系统需要将订单标记为“已失效”状态。这一逻辑通常通过定时任务实现,定期检查订单是否超时。 2. **使用定时任务检查订单状态** 在 FastAdmin 中,可以利用内置的定时任务模块来定期执行订单状态检查脚本。例如,每天或每小时运行一次任务,检查所有未支付且已超时的订单[^1]。 ```php // 示例代码:定时任务中检查订单失效 public function checkOrderTimeout() { $timeout = 24 * 3600; // 例如,订单未支付超时时间为24小时 $expireTime = time() - $timeout; $where = [ 'status' => 0, // 假设0表示未支付 'createtime' => ['<=', $expireTime] ]; Db::name('order')->where($where)->update(['status' => -1]); // -1表示订单已失效 } ``` 3. **通过事件监听触发操作** 在订单状态更新为“失效”后,可以通过事件监听机制执行后续操作,如发送通知、释放库存等。FastAdmin 支持事件绑定,可以在订单状态更新时触发特定事件[^1]。 ```php // 示例代码:在订单状态更新时触发事件 \think\Hook::listen('order_expire', $order); ``` 4. **配置微信支付回调** 如果订单涉及微信支付,还需要确保微信支付回调接口能够正确处理订单状态变更。在订单支付失败或用户取消支付时,微信服务器会回调商城系统的指定接口,此时需要更新订单状态并触发相关事件[^2]。 5. **日志记录与调试** 在实现过程中,建议开启详细的日志记录功能,以便于调试和追踪订单状态的变化。可以通过 FastAdmin 的日志功能记录订单状态变更信息,便于后续排查问题。 ### 调试建议 - **检查定时任务配置**:确保定时任务已正确配置,并定期执行。 - **验证订单状态更新逻辑**:通过模拟订单超时场景,验证订单状态是否能正确更新。 - **查看日志信息**:如果订单状态未按预期更新,检查日志文件,查找可能的错误或异常信息。 - **测试微信支付回调**:确保微信支付回调接口能够正确接收并处理订单状态变更信息[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值