项目技术点总结

接收支付结果消息

  1. 付款是批量付款,一个付款对应多个付款详情,需要对多个供应商付款。
  2. 因为同时付款所以支付结果 mq 基本也是同时接收到。
  3. 业务诉求,当支付详情都收到支付结果后,支付单状态变为支付完成。
  4. 处理方案,以付款单 id为纬度进行加锁。
  5. 不加锁后果:有 A、B 两个支付 详情,线程1收到支付成功消息,更新 A 为支付成功,查询是否所有都已支付成功,这时 B 尚未支付成功,所以不更新付款单状态为支付完成;在 A 线程提交事务前,线程2收到 B 支付成功消息,更新 B 为支付成功,然后查询是否都已支付,因为此时 A 线程尚未提交,所以查询的是 A 线程还未支付,不更新付款单状态。最终造成付款单状态不能够变为支付完成。

    推荐阅读