好几天没更新austin
的系列文章啦,主要是一直在写austin
的代码。而这篇文章我想了很久标题,最后定为《优雅,不过时》。文章的内容主要由以下部分组成:
- 应用发布重启了怎么办?内存数据不是丢失了吗?
- 什么是优雅停机?如何实现优雅停机?
- 如何优雅地调整线程池的参数?
如果你的项目遇到了类似的问题,也可以借鉴下我今天所讲解的内容,读完我相信你肯定会有些收获。
01、应用发布重启了怎么办
众所周知,如果我们系统在运行的过程中,内存数据没存储起来那就会导致丢失。对于austin
项目而言,就会使消息丢失,并且无法下发到用户上。
这个在我讲述完我是如何设计「发送消息消费端」以及「读取文件」时,尤其问得比较多。为了部分没有追更的读者,我再简单讲述下我这边的设计:
在austin-handler
模块,每个渠道的每种消息类型我都用到了线程池进行隔离而消费:
在austin-cron
模块,我读取文件是把每一条记录放至了单线程池做LazyP