背景:一定时线程往一队列写数据,若直接停止重启服务会造成队列数据丢失。
问题:如何解决重启数据丢失。
方案1:
停止服务时几个步骤:
1)停止往队列写数据,
2)对应处理队列的线程shutdown,不再接受新的任务。
3)将现有队列内容存到文件中。
4)kill进程(如何判断队列内容已落地,可以通过记日志来处理)。
开启服务时步骤:
1) 判断落地文件是否为空,不为空则先将其入队列。
方案2:
将文件改为共享存储,比如redis,mc等。
这样,当服务为分布式时,当一台机器停止时,队列内容可以通过其他机器读取。