因为文件很大并且数据要求幂等性,且还是用户自己上传的数据。所以需要针对单个用户串行化处理。还要要做分布式部署项目,所以 JDK 提供的 API 是无法做到的。所以最终的要求就是对用户串行,单个用户提交多个任务则排队串行运行。对系统来说就是多线程调度执行,最好还不要 CPU 进行空转。我能想到的就是空转( while )+单个用户 redis 锁去实现,想请教下各位有更好的方案么?
@keshao 为什么要空转,redis 里面一个用户一个 list (里面放这个用户要执行的导入任务,比如文件名),当你一个线程要提交任务的时候,先去查一下 redis 有没这个 list ,把执行任务需要的参数加到这个 list 末尾,如果原本没有这个 list ,代表现在这个用户没有执行着的任务,启动一个工作线程去执行,工作线程完成当前任务后,检查下自己这个用户的 list 是不是空的,空的就删除这个 list 结束工作线程,不空就在这 list 取下一个任务执行。参考下 netty
night98
2021-12-01 20:42:03 +08:00
rocketmq 顺序消息,用户 id 做 msg id ,完事,其他的就是楼上说的,手动实现单用户队列,创建线程处理