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