web 项目 针对多个用户定时提醒的功能讨论

2023-05-09 15:03:41 +08:00
 buyerhou

现在有一个需求,是对系统中的每个用户设置用药提醒,每个用户可能有多个时间点去提醒, 怎么开发这个功能,项目使用 springboot 开发的。 目前的思路是 1 一个定时任务,每分钟查询一次,将符合条件的数据查询出来进行通知。 2 每个用户设置一个定时任务,这样通知更准确。 求其他实现方案,请大家指点

863 次点击
所在节点    问与答
12 条回复
aitaii
2023-05-09 15:08:24 +08:00
根据用户设置生成 mq 延迟消息,到点消费通知记录发送通知
guaEater
2023-05-09 15:12:08 +08:00
基数大的话,需要考虑一下能不能做到准时准点。大概率是会有延迟的
buyerhou
2023-05-09 15:25:35 +08:00
@aitaii 打个比方,2023 年 5 月 到 2023 年 10 月期间每天 8 点 12 点 18 点发送 同一个用户各发送一条消息,mq 中是每天生成对应的延迟消息,还是一下子生成全部的延迟消息。
buyerhou
2023-05-09 15:26:17 +08:00
@guaEater 想着用药提醒,延迟个几分钟也没有关系。
huajia2005
2023-05-09 15:51:34 +08:00
quartz 可以根据 cron 表达式设置定时任务
funky
2023-05-09 15:53:11 +08:00
每个用户用户 id+提醒时间生成一个定时任务吧,缓存 cronID,可以撤销
aitaii
2023-05-09 15:54:58 +08:00
@buyerhou 可以用定时任务每天生成消息放到 mq 队列, 单用户单时间作为一条消息. 至于用户量大可以考虑按用户分区(例如 userId % 10)多个消费任务监听. 总的来说:生成消息和消费消息发送通知解耦了,发送失败或生成消息失败可以重试并不影响已发送的
lower
2023-05-09 16:05:44 +08:00
@buyerhou 定时+每天生成延迟任务 相结合应该是比较合理的
肯定没法一下子全部生成啊,有的 mq 延迟消息也是有最大时间的,跨 5 个月的肯定不合适
vicalloy
2023-05-09 16:08:00 +08:00
用户不多的话就每分钟查一次。
用户多,根据时间间隔多做几个队列。比如超过 2 小时一个队列,1 小时一个队列。
一小时到了后,将 2 小时队列里的用户移到 1 小时到队列。
dzdh
2023-05-09 16:11:10 +08:00
时间尽量不要过于自由。

比如弄个 map[10:00] = users[1,2,3]
设置定时就塞到对应的 map 。有一个 cron 就行了
huajia2005
2023-05-09 16:14:46 +08:00
@aitaii 这个感觉比较合理
buyerhou
2023-05-09 17:18:29 +08:00
@aitaii 好的,谢谢,有方向了
@lower 好的,用定时加延时的方法看看。后期根据业务再调整
@vicalloy 谢谢
@dzdh 谢谢,

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

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

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

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

© 2021 V2EX