问题排查:发红包一段时间就不能用了

本文讲述了在排查小红包服务出现问题的过程中,通过分析服务器日志发现是access_token失效导致的问题。进一步调查发现,由于同步组织架构的任务耗时过长,占据了定时任务的执行时间,导致access_token无法及时更新。为解决此问题,采取了增加taskScheduler配置,提高任务执行并发性的策略,从而避免了业务受影响。
摘要由CSDN通过智能技术生成

问题:小红包服务一段时间就不能用了,红包发不出去。。。

临时接受排查任务,对项目并不熟悉,首先从日志开始。。。

服务器日志:

 

 从日志看是access_token 失效导致,并查看pod里内存使用,排除内存溢出情况。

部署情况

 猜测 :维护access_token更新机制出来问题

查看项目源代码

WorkQyConfigScheduler 类,进行access_token更新机制
@Scheduled(cron = "0/30 * * * * ?")
public void execute() {
    ......

    QyGetToken corpGetToken = stringRedisClient.get(corpTokenKey, QyGetToken.class);

    if (corpGetToken == null || stringRedisClient.getExpire(corpTokenKey) <= (30 * 60)) {
         corpGetToken = WorkWxClient.getToken( workQyConfig.getCorpId(), workQyConfig.getCorpSecret() );
         if (corpGetToken != null && corpGetToken.getErrorCode() != null && corpGetToken.getErrorCode() == 0) {
         stringRedisClient.put(corpTokenKey, corpGetToken, Duration.ofSeconds(corpGetToken.getExpiresIn()));
         log.info("企业 组织 corp_id = {} 。ACCESS_TOKEN 获取成功。", workQyConfig.getCorpId());
         } else {
         log.warn("企业 组织 corp_id = {} 。ACCESS_TOKEN 不存在或者即将到期,刷新 ACCESS_TOKEN 失败。result = \n {}", workQyConfig.getCorpId(), JSON.toJSONString(corpGetToken));
         }
    }

    ......
}

猜测 :任务挂掉了,没有执行。。。

pod并没有重建或重启,查看日志证明也没有挂掉,

监控一段时间。。。

大概18:20:00之后,依然卡在这里了。

查看其他任务

 

也是卡在这里了。。。

再次查看源码:

说来也巧。。。

WorkQyConfigInitScheduler 也是0/30。。。

@Scheduled(cron = "0/30 * * * * ?")
public void execute() {
    ......
    
    //同步组织架构

    ......
}

 看到这里基本上,知道问题所在了,同步组织架构的逻辑耗时太久了!!!

查到问题所在就好办了。

解决:

1修改耗时代码

2调整调度时间

3配置调度 taskScheduler

由于对项目不是很了解,选择增加taskScheduler配置类,再后续项目开发中去重构同步组织架构逻辑

@Configuration
public class TaskSchedulerConfig {

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(2);
        return taskScheduler;
    }
}

知识扩展

 

 

 

最终,如果没有配置taskScheduler, 默认使用单一线程池处理,由于业务逻辑耗时很长,造成更新token任务迟迟没有执行,token过期,发红包业务无法进行。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值