现在有一个需求,是对系统中的每个用户设置用药提醒,每个用户可能有多个时间点去提醒, 怎么开发这个功能,项目使用 springboot 开发的。 目前的思路是 1 一个定时任务,每分钟查询一次,将符合条件的数据查询出来进行通知。 2 每个用户设置一个定时任务,这样通知更准确。 求其他实现方案,请大家指点
1
aitaii 350 天前
根据用户设置生成 mq 延迟消息,到点消费通知记录发送通知
|
2
guaEater 350 天前
基数大的话,需要考虑一下能不能做到准时准点。大概率是会有延迟的
|
3
buyerhou OP @aitaii 打个比方,2023 年 5 月 到 2023 年 10 月期间每天 8 点 12 点 18 点发送 同一个用户各发送一条消息,mq 中是每天生成对应的延迟消息,还是一下子生成全部的延迟消息。
|
5
huajia2005 350 天前
quartz 可以根据 cron 表达式设置定时任务
|
6
funky 350 天前
每个用户用户 id+提醒时间生成一个定时任务吧,缓存 cronID,可以撤销
|
7
aitaii 350 天前
@buyerhou 可以用定时任务每天生成消息放到 mq 队列, 单用户单时间作为一条消息. 至于用户量大可以考虑按用户分区(例如 userId % 10)多个消费任务监听. 总的来说:生成消息和消费消息发送通知解耦了,发送失败或生成消息失败可以重试并不影响已发送的
|
9
vicalloy 350 天前
用户不多的话就每分钟查一次。
用户多,根据时间间隔多做几个队列。比如超过 2 小时一个队列,1 小时一个队列。 一小时到了后,将 2 小时队列里的用户移到 1 小时到队列。 |
10
dzdh 350 天前
时间尽量不要过于自由。
比如弄个 map[10:00] = users[1,2,3] 设置定时就塞到对应的 map 。有一个 cron 就行了 |
11
huajia2005 350 天前
@aitaii 这个感觉比较合理
|