项目问题排查-分拨框号重复

本文讲述了在物流分拨系统中,由于分布式锁时间过短和并发请求导致的框号绑定异常,包括COE合箱后的误释放、事务提交延迟和幂等性问题。通过案例分析和排查步骤,作者揭示了如何优化分布式锁机制以避免框子重复占用的问题。
摘要由CSDN通过智能技术生成
  • 正常情况:

 

下架后,一个框绑定一个波次-多个订单

分拨:一个框号绑定一个墙,一个格口对应一个订单

  • 出现的异常情况:

下架后,一个框子绑定了多个波次,导致分拨混乱(因为包裹不属于一个波次下的订单,会提醒包裹不属于当前波次,正常直接提醒去哪个格口了)

  • 知识点:

拉波次-绑定框号pcs-wms-outstock#OffShelvesService#pullAutoWaveInfo

框号绑定分布式锁时间:8s

完成分拨-解绑框号pcs-wms-outstock#AllotServiceManager#execAllotFinished

  • 框重复问题一直陆续出现。主要问题有一下几点:
  1. COE合箱后误释放框(1号仓的框是合箱后释放):分拨完成释放了一次,这时这些框可以被其他下架波次占用,合箱时再释放会导致被正在占用的框被释放。【已修复-COE合箱不释放框】
  2. 下架拉波次占用框时,分布式锁时间过短,事务在分布式锁时间内还未提交,导致框被重复占用。【已修复-加长分布式锁的时间】
  3. 同一扫墙请求多次调用,生成多条绑定记录job_wall_wave_binding(非并发原因)。【已修复-接口幂等】

1、2点展开:可认为框分布式锁获取成功=框状态为已占用(事务未提交)

case1. 分布式锁时间过短,造成事务提交前释放了分布式锁。问题波次与框:4C07框BN19051509381007|BN19051509391003|BN19051509401003
排查步骤:pcs-wms-outstock powerlog,getContainerCode 4C13,按时间定位获取分布式锁获取成功时间,再使用traceId跟。

B1:BN19051509381007: 0b151f1515578863233215655e0d1c

2019-05-15 10:12:04 获取分布式锁成功

2019-05-15 10:12:04 开始落表

2019-05-15 10:12:12 释放分布式锁 1

2019-05-15 10:12:29 落表成功--事务提交,数据库锁释放 2。这里落表整整花了25s...

注意1,2时间,事务还未提交,分布式锁已释放,此时,在事务内框其实已经被占用,但因为尚未提交,对其他事务是不可见的,且框的分布式锁已经被释放,所以就导致了已被占用的框又被占用了,多个波次绑定一个框。

 

ps:BN19051509391003其实未重复占用框,这里有一个锁等待超时知识点,值得记录一下。

B2:BN19051509391003: 0b15510715578863342013591e0cac

2019-05-15 10:12:18 获取分布式锁成功 3

2019-05-15 10:12:18 等待获排他锁更新sys_container,因为此时B1的事务还未提交,4C07框记录行的排他锁未释放

2019-05-15 10:12:24 等待锁超时,抛出异常,事务回滚,此次拉波次请求无效

2019-05-15 10:12:26 释放分布式锁 

 

B3:BN19051509401003: 0b1548b415578863479504984e0d0b 4C07框

2019-05-15 10:12:28 获取分布式锁成功,等待B1在2019-05-15 10:12:29事务提交锁释放,绑定框号成功

2019-05-15 10:12:36 释放分布式锁

2019-05-15 10:12:29 开始落表

2019-05-15 10:12:31 落表完成
为保证逻辑正确,分布式锁的释放一定要在事务提交后。

case2: 同一扫框请求多次,生成多条job_wall_wave_binding

5c07785ad49b923965cd79869d9e453f.png

无效扫墙后,再点完成分拨,又将占用中的框给释放了。

 

思考:接口开发时,并发情况,幂等,极端情况的考虑。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值