网络互斥:如何解决当界面操作提示互斥,互斥列表却不存在记录的问题
1 问题描述
执行界面操作提示数据被锁定,但是在互斥列表中却没有看到互斥记录应该如何处理
2 分析思路
2.1 如何确认锁定该业务数据的源操作,有两种方式
2.1.1 第一种方式:根据提示互斥的traceid 在monitor中搜索记录
(1)通过关键字DataMutex.afterLocked,搜索加锁失败的信息,从下图可知,提交操作想要申请这条数据的锁,但是失败了
(2)将entityKey:实体编码作为关键字,将上个搜索结果的时间作为结束时间,在monitor中搜索是否这段时间有其他操作占用了这个锁
通过上述信息,可以看到该数据被列表的超链接点击操作锁定了,opKey,opMethod是执行该锁定的操作
注意:这种方式查找比较快速,适合申请锁不是很频繁的场景。
如果数据被锁的时间较长或者该业务场景比较频繁的申请锁,用这种方式就不太好排查,可以考虑用下面的方式
2.1.2 第二种方式:需要根据网络互斥的key去redis上查找数据被锁的具体时间
(1)key的组成accountID_ datalock_entityKey_groupId
accountID:数据中心id
datalock:固定值
entityKey:实体编码
groupId:普通操作一般为default_netctrl,如果有二开网络互斥的场景要用当时自定义的编码
例如:1173910536060928000_datalock_bos_user_default_netctrl
(2)根据被锁的数据id找到被锁的时间(lockedTime)
(3)将时间戳转换成北京时间作为开始时间,将DataMutex.afterLocked作为查询关键字,去monitor查询
如上述信息,可以看到该数据被列表的超链接点击操作锁定了
2.2 如何确认锁是否释放
(1)当数据可以被操作时,锁已释放
(2) 可通过关键字DataMutex.doRelease和数据id,在monitor中查询是否有释放日志
3 如何解决删除锁
(1)先确认互斥锁能不能删
现在业务逻辑由于申请不到锁执行不下去了,之前遗留未删除的锁是否能删除,需要执行该操作的业务判断。是否有正常执行中的流程依赖这个锁,释放锁后是否会导致重复付款,重复计算等问题。
(2)正常情况下从互斥列表界面删除
(3)将redis中互斥锁的key以及需要删除的数据id反馈给运维,让运维帮忙删掉这个锁
网络互斥:如何解决当界面操作提示互斥,互斥列表却不存在记录的问题
本文2024-09-23 00:17:27发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138526.html