Appearance
架构概述
EBAOZU V4 采用 Swoole Crontab 高性能定时调度 与 ThinkQueue(基于 Redis 驱动)异步消息队列 相结合的分布式任务处理架构。
通过将耗时的外部网络调用(如支付宝代扣、微信分账、电子合同生成、短信推送、大数据风控评分等)异步入队处理,确保了高并发场景下 HTTP 接口的毫秒级响应与高系统吞吐量。
核心异步队列 (ThinkQueue) 全景清单
队列类统一放置于 app/jobs/ 目录下,继承自 crmeb\basic\BaseJobs:
租赁业务与风控履约队列
队列类名 (app/jobs/order/) | 触发时机 / 调度频率 | 核心业务处理逻辑 | 失败重试策略 |
|---|---|---|---|
OrderWithholdJob | 每日代扣窗口 (07:00~22:00) / 每期账单还款日 | 遍历到期租赁账单,调用支付宝/微信代扣接口扣除租金,更新分期还款状态与销账 | 3 次指数退避 (间隔 1h, 4h, 8h) |
OrderAutoAuditJob | 用户提交租赁订单并完成签约后 1 分钟 | 调用第三方风控引擎执行大数据机审评分,判定自动通过、加押或转人工复审 | 2 次重试 |
OrderUnpaidJobAutoOrderUnpaidCancelJob | 订单创建后延迟 N 分钟 (如 30min) | 检查订单是否完成支付,超时未付则自动释放锁定库存并关闭订单 | 1 次重试 |
LeaseRejectFulfillJob | 商家在二段式取消中选择路线 B | 异步执行状态 3 逆向链:自动转自提、静默核销收货、完结订单、解冻预授权并原路退款 | 3 次重试,耗尽告警 |
CloseTimeoutBuyoutJob | 用户发起买断后超时未支付 | 关闭超时未付款的买断申请单,恢复原租赁正常分期状态 | 1 次重试 |
财务分账与结算清算队列
| 队列类名 | 业务定位 | 核心处理逻辑 |
|---|---|---|
OrderProfitsharingJobAutoOrderProfitsharingJob | 微信服务商分账 | 在订单确认收货且过售后维权期(如 7 天)后,自动向微信支付请求解冻资金并按比例分账给门店与供应商 |
CircleFinancialRecordJob | 门店与商圈财务流水 | 异步归集商户日结算账单,计算平台抽佣、代扣手续费与门店实收流水 |
消息触达与第三方通知队列
队列类名 (app/jobs/notice/) | 消息载体 | 核心处理逻辑 |
|---|---|---|
SmsJob / SmsAdminJob | 手机短信 | 调用 EBAOZU 自研一号通短信接口下发验证码、还款预警与催缴通知 |
WechatTemplateJob | 微信公众号 | 下发服务号还款账单、代扣成功与逾期提醒模板消息 |
RoutineTemplateJob | 微信小程序 | 下发订单发货、审核结果与自提核销订阅通知 |
EnterpriseWechatJob | 企业微信 Webhook | 向运维与客服企微群实时播报大额订单、风控拦截与系统异常告警 |
Swoole 定时任务与常驻调度
在 app/jobs/ 与系统事件中,Swoole 进程启动时自动注册以下毫秒级常驻调度器:
- 每日代扣定时触发器:每日
07:00、12:00、18:00自动扫描eb_store_order_installment当日应还账单,批量推入OrderWithholdJob; - 到期与逾期预警扫描:每日
09:00自动检索距到期日还剩 3 天的账单发送还款提醒;扫描超出宽限期的账单累计违约金并发送催缴短信; - 超时自动收货检测:每小时执行一次,检索发货已满 7 天且买家未确认收货的订单,自动执行系统收货并起租。
运维部署与 Supervisor 守护配置
为保证队列在生产环境中具备高吞吐量与故障自愈能力,必须使用 Supervisor 进行进程守护。
Supervisor 队列守护配置示例
ini
[program:ebaozu_queue]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/ebaozu_v4/think queue:listen --queue default,order,notice --delay 0 --memory 256 --sleep 3 --tries 3
directory=/www/wwwroot/ebaozu_v4
autostart=true
autorestart=true
user=www
numprocs=4
redirect_stderr=true
stdout_logfile=/www/wwwroot/ebaozu_v4/runtime/log/queue.log- 配置参数建议:
numprocs=4:启动 4 个并发消费进程,兼顾多核 CPU 性能;--memory 256:单个 Worker 内存达到 256MB 时自动平滑重启,防止 PHP 内存泄漏;--tries 3:队列任务连续失败 3 次后自动移入死信队列并记录错误日志。