【面试题】如果线上机器突然宕机,线程池的阻塞队列中的请求怎么办?

必然导致线程池中积压的任务会丢失

本问题主要考察如何解决线程池中任务丢失的问题,要想办法把任务信息入库

如果要提交一个任务到线程池里去,在提交之前,可以将当前任务信息插入数据库,更新他的状态:未提交、已提交、已完成。提交成功后,更新他的状态为已提交状态。

系统重启,后台线程去扫描数据库里的未提交和已提交状态的任务,可以把任务信息读出来,重提交到线程池里,继续进行执行

【评论区】

1、因为请求数据都在内存中的,因此宕机就会丢失,但是我们可以记录对应的执行状态,然后针对不同类型的请求,去做幂等或者去重的一些操作

幂等:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。即是重复提交数据也是唯一性

2、那怎么保证提交和修改成已提交状态一致性呢?

上述通过状态来判断的方法,存在一个问题:状态还没来得及修改,宕机了,重启服务以后,这个任务就会重复执行。

保证提交的过程接口时幂等的

幂等:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。即是重复提交数据也是唯一性

3、如果是在写入数据时宕机,原始信息没存入数据库,也丢了,这种一般有好的方法处理吗?

每一个操作进行封装,如果写入数据库的时候宕机了,认为此任务没有提交成功,直接返回失败状态就行了,比如你买东西,请求到后台了,写数据库的时候宕机了,返回一个false,你没买到就得了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值