请教大家一个定时发送消息的实现思路

2018-09-08 20:24:18 +08:00
 kwklover
WEB 架构的项目,是一个预约系统,需要在客户预约时间前三十分钟发送一条短信提醒客户,我想到的方案是做个定时器定时访问指定页面,在页面里实现发送短信的逻辑,我想请教下其他的解决方式。最好是无需维护的方案,项目交付客户之后,不能老是去监控定时器挂了没吧?
4382 次点击
所在节点    程序员
15 条回复
shiny
2018-09-08 20:28:03 +08:00
需要你交待下技术选型背景,什么语言什么框架。比如 node 下的 egg.js 自带定时器,稳如老狗。
jybox
2018-09-08 20:32:24 +08:00
无需维护的还是机器自带的 crontab 比较稳,写个 curl 命令访问你的 HTTP API 就可以了。

如果需要消除单点的话,可以同时在多个机器上配置 crontab,然后在你的程序( HTTP API )里访问 Redis 或其他数据库,加一个 30 分钟的锁避免重复触发。
limuyan44
2018-09-08 20:51:01 +08:00
既然是交付的,又不要维护,丢 db 里面开个定时任务慢慢扫吧,这种任务也不用精确
FRankie222
2018-09-08 21:17:07 +08:00
我做过一个需求,不知道和你说的是否相似,在数据库中按照主键存一个时间点,到了这个时间点给主键对应的信息发送消息,当时是用的定时任务每隔 2 分钟去跑一次,把里面的时间点和当前的比较,如果时间差在两分钟内,就发出去。数据量不大,每次也就一万多条
brickyang
2018-09-08 21:25:24 +08:00
可以用 Redis 的过期键。客户预约时就新建一个到「提醒时间」过期的键,过期时 Redis 会有消息,通知系统订阅该消息即可。

稳不稳主要看 Redis,用阿里云之类的服务基本可以放心。
GGGG430
2018-09-08 21:27:14 +08:00
延时消息队列
kwklover
2018-09-08 21:34:35 +08:00
@shiny windows 平台 asp.net 技术,我目前想到的方案就是通过计划任务定时访问指定网页。
kwklover
2018-09-08 21:36:34 +08:00
@limuyan44 用的是 mysql 数据库,没有用 redis 那么高级的技术啊
thinkif
2018-09-08 21:41:03 +08:00
@kwklover asp.net 用 Hangfire 之类的都可以,手上有几个项目用的这个,很好用
anonymous256
2018-09-08 22:05:58 +08:00
daimazha
2018-09-08 22:32:17 +08:00
quartz
kwklover
2018-09-08 22:44:26 +08:00
楼上的方案用来发送短信提醒可以,不过还有一个需求是定时下发微信客服消息,微信会校验域名,似乎不行哦
xiexingjia
2018-09-08 22:49:56 +08:00
letitbesqzr
2018-09-09 22:15:42 +08:00
@brickyang #5 是说的 keyspace notification 这个特性吧。 被这东西坑的,少记录了一堆重要数据,数据量大的话,建议还是不要用了。。
brickyang
2018-09-09 23:26:56 +08:00
@letitbesqzr #14 什么是「少记录了一堆东西」?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/487453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX