1. 异步捞取交易处理的时候,捞取机器ip限制。比如捞取交易表里面状态为U状态的数据,产线可能部署了多台机器,但是可以指定其中一台机器单线程进行捞取。
2. 异步捞取交易处理的时候,可以把捞起来的数据先打个标,更新成功后继续后续的处理流程,如果捞起了交易但是打标失败,则不进行后续处理。如落库状态是U,设置一位flag标识,捞起数据时,捞取flag=0且状态为U的交易,捞起后将flag置为1,flag=1表明数据被捞起正在处理中,待处理完成后再将该flag置为0.
3. 异步捞起交易处理的时候,不做任何处理,到更新数据的时候,做一些前置状态校验。(如果两台机器同时捞起P状态的数据进行处理,处理完成后需要将交易状态更新为终态,则更新终态时应在where条件中增加前置状态P,这样即使两台捞起,最后也只有一台能更新成功。能够保证数据只处理一次,避免出现终态后变更状态或者处罚变更数据状态后的后续流程--比如给上游重复发Q啥的)
4. 为了避免对文件进行重复处理,在文件入库前,可以采用处理文件、重命名文件、移除文件到另一个路径下,避免对同一个文件进行重复处理。
5. 文件处理,一般文件对应有一条记录、文件明细对应有多条记录,可以通过控制文件状态,避免被重复处理。
6. 利用幂等。目前常用的是数据库唯一索引。一般选取具有业务含义的单号做唯一索引---比如支付单号,每次收到请求,先插入幂等表再进行后续流程,幂等失败,交易拒绝。