xxljob阻塞处理策略设置为单机串行导致的bug

场景描述:

之前我们公司有个项目需要每五分钟去拉取平台上的订单,于是乎我就在xxljob设置了这个定时任务,设置如下:

然后xxljob内的代码如下:

java 复制代码
@XxlJob(value = "pullOrderTask")
    public ReturnT pullOrderTask(String param) {
                orderService.pullOrderTask();
        return ReturnT.SUCCESS;
    }

错误描述:

然后我发现有些订单没有拉取下来有遗漏,对运营工作造成了影响。

错误分析:

我第一时间找到了没拉取下来的订单,看了一下定时任务打印的日志,发现定时任务执行有延迟,本来16:30以后还要再执行三次任务,但是日志中没有体现,16:30以后应该要执行的三次任务延迟到了16:52在执行。后来检查代码才发现执行pullOrderTask这个方法的时候,调用第三方平台的接口有限流,因此我设置了重试和延迟机制,这就导致有些任务在五分钟内并没有执行完毕。

而我设置的阻塞策略是串行这就导致了,前面的任务没完成,后面的任务来的话只能进入阻塞队列,到前面的任务执行完毕之后再执行。

错误解决:

一、设置用多线程执行任务

再看了xxljob的文档以后,我发现剩下的两个阻塞策略都无法解决我的问题,因此我引入了多线程用多线程执行定时任务,就不会发生上面的事情了,代码如下:

java 复制代码
    @Resource(name = "threadPool")
    private ThreadPoolExecutor threadPool;



@XxlJob(value = "pullOrderTask")
public ReturnT pullOrderTask(String param) {
xingshaThreadPool.execute(()->{
  try {

              orderService.pullOrderTask();
      } catch (Throwable e) {
       log.error("定时拉取处方单多线程错误,入参为{},错误详情:{}", JSON.toJSONString(param),e);
            }
        });
               
        return ReturnT.SUCCESS;
}

二、设置兜底任务在夜间把昨天所有订单再拉取一遍

除此之外我又设置了一个定时任务,凌晨1点拉取昨天的所有订单,以防上面的那个订单有遗漏。

相关推荐
前端大波2 小时前
avue-crud 操作列透明 bug
bug
hui函数1 天前
Python系列Bug修复|如何解决 pip install 安装报错 invalid command ‘bdist_wheel’(缺少 wheel)问题
python·bug·pip
hui函数1 天前
Python系列Bug修复|如何解决 pip install -r requirements.txt 私有索引未设为 trusted-host 导致拒绝 问题
python·bug·pip
hui函数1 天前
Python系列Bug修复|如何解决 pip install 安装报错 Backend ‘setuptools.build_meta’ 不可用 问题
python·bug·pip
hui函数1 天前
Python系列Bug修复|如何解决 pip install -r requirements.txt 私有仓库认证失败 401 Unauthorized 问题
python·bug·pip
hui函数1 天前
Python系列Bug修复|如何解决 pip install -r requirements.txt 子目录可编辑安装缺少 pyproject.toml 问题
python·bug·pip
啊湘2 天前
VSCODE英文界面切换为中文(适用CURSOR等使用)
ide·vscode·编辑器·bug·cursor
hui函数2 天前
Python系列Bug修复|如何解决 pip install -e . 安装报错 “后端不支持可编辑安装(PEP 660)” 问题
python·bug·pip
一条咸鱼_SaltyFish2 天前
[Day16] Bug 排查记录:若依框架二次开发中的经验与教训 contract-security-ruoyi
java·开发语言·经验分享·微服务·架构·bug·开源软件
luming-023 天前
报错解决:IDEA终端输出和CMD终端输出Maven版本不一致
java·缓存·bug·intellij-idea