今天跟大家聊聊我最近搞的这个fastmsg
,一开始也没想搞这么复杂,纯粹是想弄个简单点的消息推送工具,方便自己平时用,结果一不小心就搞大了。
起因:
事情是这样的,我平时经常需要关注一些服务器的状态,或者是一些脚本的运行结果。以前都是靠邮件,但是邮件这玩意儿,延迟高不说,还容易被当成垃圾邮件,经常错过重要信息。所以我就寻思着,能不能自己搞个轻量级的消息推送工具,实时性好一点,提醒更及时一点。
调研:
我想着直接用现成的方案,比如钉钉、企业微信啥的,但是这些玩意儿都太重了,而且要注册、认证、申请权限,太麻烦了。而且我也不想把自己的数据放到别人的服务器上,总感觉不太安全。于是我就决定自己动手。
技术选型:
既然要自己搞,那就要考虑技术选型了。我的目标是简单、高效、稳定,所以最终选择了Python
+ Flask
+ Redis
。Python
上手快,Flask
轻量级,Redis
做消息队列和缓存,简直是绝配。
撸起袖子就是干:
我搭了个Flask
框架,写了个简单的API
接口,用来接收消息。然后,用Redis
做消息队列,把接收到的消息放到队列里。写了个Python
脚本,不断从Redis
队列里取消息,然后通过各种渠道推送出去,比如邮件、短信、甚至还可以对接一些第三方的消息推送平台。
踩坑:
中间也遇到了不少坑。比如,Redis
队列的消息丢失问题,我通过设置Redis
的持久化机制解决了。还有,高并发情况下,Flask
的性能问题,我通过Gunicorn
+ Nginx
做了负载均衡。最头疼的是,各种消息推送平台的API
接口都不一样,需要适配不同的接口格式,简直是烦死人了。
功能完善:
经过一段时间的迭代,fastmsg
的功能也越来越完善了。它已经支持:
- 多种消息推送渠道:邮件、短信、第三方消息推送平台
- 自定义消息模板:可以根据不同的场景,设置不同的消息模板
- 消息优先级:可以设置消息的优先级,确保重要消息能够及时推送
- 错误重试机制:如果消息推送失败,会自动重试
- Web管理界面:方便查看消息推送状态和日志
部署:
我把fastmsg
部署到了一台云服务器上,用Docker
做了容器化,方便管理和维护。只要我需要推送消息,直接调用API
接口就可以了,非常方便。
这回实践还是很有收获的。不仅学会了Python
、Flask
、Redis
等技术,还锻炼了自己的解决问题的能力。虽然fastmsg
还不是很完善,但是已经基本满足我的需求了。以后有时间,我会继续完善它,争取把它打造成一个更加强大、易用的消息推送工具。
一些想法:
做技术就是这样,不要怕麻烦,遇到问题就解决问题。很多时候,我们缺的不是技术,而是动手实践的勇气。希望我的这回分享,能够给大家带来一些启发。