业务问题描述
1.创建运单,发现重复(同一个车架号两条记录)
2.通知重复反馈,A系统读取中间表状态为未处理数据,推送到B系统
原因分析
1.以上两个问题都是xxljob定时执行的
2.通过日志分析,读取中间表数据,同一条数据被多次处理
针对重复运单数据分析,之前有没有做控制,应该做幂等
查看发现
1.数据库层面:没有做唯一索引控制
2.代码层面:通过查询是否存在,做幂等。但是并发情况下,这种校验无效
处理方案
1.运单重复问题
加分布式锁 / 加惟一索引
原因再分析
1.业务日志,发现同一个单子被重复处理了多次
2.xxljob日志如下,发现调度时间正常,执行时间出现了很大的延迟,导致4个任务,调度时间间隔5min,实际执行时间却是几乎同一个时间,09:57:42,可能只是相差毫秒级。并发执行。
到这里找到了问题源头,是xxljob的问题,导致了重复执行。
那么为什么xxljob出现了这样的问题。
猜测:任务过多,xxljob执行线程,不够用,任务在执行队列中等待,等有空闲线程时,等待的任务被同时调用。
官方文档
分布式任务调度平台XXL-JOB
找到如下内容
几个概念:异步执行队列,执行器
疑问
单机能够支撑5000任务并发运行稳定运行,按理说够啊
而且执行线程总共有多少
关于事物,job执行的任务,是否存在事物。