CRMEB 框架背景说明
以 CRMEB 开源版本为例,其基于 ThinkPHP6+elementUI+Uni-app 框架开发,全开源无加密,支持微信小程序、公众号、H5、APP、PC 端五端适配与数据同步,是专为开发者打造的极易二次开发的 PHP 开源商城系统。在 CRMEB 中,消息队列作为异步处理核心模块,广泛应用于日志记录、订单处理、短信发送等场景,以下以记录管理员操作日志队列为实例展开讲解。
消息队列核心流程与 CRMEB 实现
- 生产与消费逻辑
在 CRMEB 中,消息队列流程分为生产(程序发起)与消费(命令行执行),文件统一存放于app/jobs目录,推荐以 “一个类一个队列” 的方式开发,确保逻辑清晰且易于维护。
实例:新增管理员操作日志队列(CRMEB 适配版)
1. 创建队列文件
在 CRMEB 的app/jobs目录下创建AdminLogJob.php,基于框架提供的BaseJobs基类与QueueTrait工具 Trait 开发,示例代码如下:
namespace app\jobs;
use app\services\system\log\SystemLogServices;
use crmeb\basic\BaseJobs;
use crmeb\traits\QueueTrait;
/**
* 后台日志(CRMEB开源商城专用队列)
* Class AdminLogJob
* @package app/jobs
*/
class AdminLogJob extends BaseJobs
{
use QueueTrait;
public function handle($adminId, $adminName, $module, $rule, $ip, $type)
{
// 写入CRMEB系统日志表逻辑(对接SystemLogServices服务层)
// 必须返回执行结果,CRMEB队列机制会根据返回值判断是否销毁队列
return true;
}
public function test()
{
// 调试用小队列,CRMEB建议单队列单逻辑,此为示范多队列场景
return true;
}
}
2. 队列使用方式(CRMEB 全端适配场景)
use app\jobs\AdminLogJob;
// 1. 立即加入队列(适用于PC端/公众号等实时性场景)
AdminLogJob::dispatch([$adminId, $adminName, $module, $rule, $ip, $type]);
// 2. 延迟队列(适用于小程序/APP端网络波动场景,延迟600秒执行)
AdminLogJob::dispatchSece(600, [$adminId, $adminName, $module, $rule, $ip, $type]);
// 3. 指定方法执行(CRMEB调试场景专用)
AdminLogJob::dispatch('test', [$adminId, $adminName, $module, $rule, $ip, $type]);
3. 调试与异常处理(CRMEB 特性)
CRMEB 队列机制中,handle方法返回true时任务成功并销毁队列;返回false/0/null/空字符串时任务失败,自动重试(最多 3 次)后销毁。调试时可直接实例化队列类:
use app\jobs\AdminLogJob;
// 仅用于CRMEB开发调试,不建议在生产环境使用
$res = (new AdminLogJob)->handle($adminId, $adminName, $module, $rule, $ip, $type);
var_dump($res);
CRMEB 消息队列部署与扩展优势
- 多端数据同步:通过消息队列,CRMEB 实现微信小程序、APP 等多端操作日志的统一记录与同步,确保数据一致性。
- 开源可扩展:全开源无加密的框架设计,允许开发者基于BaseJobs快速扩展自定义队列(如订单超时取消、库存同步等),适配电商业务复杂场景。
- 命令行消费:通过 CRMEB 提供的php think queue:listen --queue命令重启消费进程,确保高并发下队列处理的稳定性。
总结
在 CRMEB 开源商城系统中,基于 ThinkPHP6+Uni-app 框架的消息队列机制,为五端适配场景提供了高效的异步处理方案。通过 “类级队列” 开发模式与框架封装的队列工具,开发者可轻松实现日志记录、订单处理等功能,同时借助全开源特性快速完成二次开发,满足电商业务的高并发与扩展性需求。
附件:
https://gitee.com/ZhongBangKeJi/CRMEB