全部
常见问题
产品动态
精选推荐
功能建议

分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
队列问题

管理 管理 编辑 删除

f94aa202604171715502380.png


### 现场还原


1. **[主进程] 开启事务**:执行 `$services->transaction(...)`

2. **[主进程] 写入订单**:执行了 `createOrder`(**注意:此时事务未 commit,数据库里的这条订单对其他进程是不可见的**)

3. **[主进程] 触发支付成功**:在同一个事务内执行 `paySuccess` -> 触发 `event('order.pay')`。

4. **[主进程] 疯狂塞入队列**:`Pay.php` 监听到事件,瞬间把一堆任务按顺序推入 Redis 队列。

  - **推入的第 1 个任务**:`OrderStatusJob('pay_success')` (即写“用户付款成功”)

  - **推入的第 N 个任务**:`OrderTakeJob('autoDeliveryAndTake')` (即处理自动发货/收货)


---- **此时,主进程还在执行收尾代码,事务依然没有 commit!** ----


5. **[Redis 进程] 瞬间接单执行第 1 个任务**:

  Worker 进程拿到 `OrderStatusJob('pay_success')` 开始执行。它会去执行:

  `$orderInfo = $orderService->get($orderId);`

  **因为主进程还没 commit,根据 MySQL 的隔离级别(Repeatable Read),此时 Worker 进程去查这张订单,查出来的结果是:找不到订单(`null`)!**

  接着,代码走到 `if (!$orderInfo) { return true; }`,直接**静默放行**了!所以,“用户付款成功”的记录**永久丢失了**。


6. **[主进程] 终于 Commit**:主进程终于执行完了闭包,将事务 Commit。**此刻,订单才真正暴露给所有进程可见!**


7. **[Redis 进程] 接着执行第 N 个任务**:

  Worker 进程执行完前面的任务后,轮到了 `OrderTakeJob`。

  `OrderTakeJob` 内部执行了一堆逻辑,然后去查数据库:`$orderInfo = $service->get((int)$orderInfo['id']);`

  **因为这时候主进程已经 Commit 了,所以它成功查到了订单!**

  随后,它成功执行了收货逻辑,并重新触发了一个新的写入记录动作:`OrderStatusJob::dispatch(['take_delivery'])`。

8. **[Redis 进程] 成功写入自动收货**:这个新的 `OrderStatusJob` 执行时,订单已经在数据库里了,所以成功写下了你截图里的 **“已收货[自动收货]”**!


### 🎯 结论

* 并不是 Redis 丢了消息(因为后面的自动收货任务执行了)。

* 并不是代码没走到那里(因为其他关联任务都进队列了)。

* **纯粹是因为 `OrderStatusJob('pay_success')` 跑得太快了!它在主进程 `commit` 之前就去查了数据库,查不到就静默放弃了。**

{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

陈小龙 最后编辑于2026-04-17 17:16:55

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
21
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服
CRMEB咨询热线 400-8888-794

扫码领取产品资料

功能清单
思维导图
安装教程
CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服