• 【若依】定时任务问题:关闭了定时任务,但是依然在跑,且同一时刻跑了多条记录,为什么?


    问题1

    描述:

    定时任务关闭了, 但是服务器定时任务依然在跑

    原因:

    若依自带定时任务有缓存,且缓存是服务器内存,不是分布式缓存。

    • 单体项目:

      很可能是手动修改了数据库表中的定时任务开关,但是缓存没有关闭。

    • 集群项目:

      项目部署在多个节点上,且每个节点绑定的数据库表是同一张表;

      若依框架定时任务使用的调度器缓存是服务器内存,不是分布式缓存,所以在节点1 关闭定时任务,节点2查看的时候,展示的是关闭,但是实际上节点2内存中的开关缓存依然是开,所以结点2依然会跑。

    办法:

    刷新服务器内存中的缓存;

    操作:

    • 单体项目:

      重新开启-再关闭;或者重新构建服务器部署

    • 集群项目:(k8s项目部署多个节点)

      每个节点重新开启-再关闭;或者重新构建每个节点的服务器部署;

    问题2

    描述:

    同一时刻,定时任务执行了多次;执行多次结果幂等(比如:单据本来就因为业务原因同步系统1失败,你再执行,它结果还是失败)

    原因:

    下面这段代码是定时任务调用的同步失败问题订单的服务方法:

        public void synSrmProblemOrderFail() throws Exception {
            String key = RedisKeyPre.inventorySrmProblem;
            RLock rLock = redissonClient.getLock(key);
            try {
                // 尝试加锁,最多等待3秒,上锁以后300秒自动解锁
                boolean res = rLock.tryLock(3, 300, TimeUnit.SECONDS);
                if (!res) {
                    Log.info(LogBuilder.builder().business("同步SRM问题单,请等待锁释放").build());
                    return;
                }
            } catch (InterruptedException e) {
                Log.error(LogBuilder.builder().business("同步SRM问题单获取锁异常" + e).build());
            }
            try {
                qmsAsyncTaskService.synSrmProblemOrderFail();
            } finally {
                releaseLock(rLock);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    上面代码对应出现定时任务一个时刻时,执行多次场景(项目部署在多个节点):
    image-20231012090415099

    • 注意:这里如果多个节点系统时间不一致时,考虑是否节点执行是否同频,以造成这个结果;

    办法:

    结合业务场景考虑:是否确保同一时刻只有一个结点在同步;

    比如:类似发短信的定时任务,每天10点给客户发,结果你这个10点给客户发了多条,这就不行了;

    不过,还有一种场景,就是同步失败单据,虽然结果会出现幂等(业务原因同步失败的单据,你同步多少次都是失败),但是对于网络原因失败的,可以每个节点都执行时,也可以考虑不处理;

    • 如果要确保同一时刻只有一个结点执行,需要优化代码

      image-20231012091715433

  • 相关阅读:
    Redis数据库管理工具Redis Desktop Manager最新中文
    【云原生Kubernetes】部署K8S集群架构(admin部署)
    GORM教程
    js--滚轮事件
    KNN实现鸢尾花分类
    可编程 USB 转串口适配器开发板专用工具 S2STool 介绍
    5、架构-负载均衡
    微软SQL服务器被黑客入侵以窃取代理服务的带宽
    团队活动和社交交流能否增进同事之间的互动和理解?
    【后端】黑马MVC案例详解
  • 原文地址:https://blog.csdn.net/MS_SONG/article/details/133775411