V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
buyerhou
V2EX  ›  问与答

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

  •  
  •   buyerhou · 2023-05-09 15:03:41 +08:00 · 976 次点击
    这是一个创建于 557 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    比如弄个 map[10:00] = users[1,2,3]
    设置定时就塞到对应的 map 。有一个 cron 就行了
    huajia2005
        11
    huajia2005  
       2023-05-09 16:14:46 +08:00
    @aitaii 这个感觉比较合理
    buyerhou
        12
    buyerhou  
    OP
       2023-05-09 17:18:29 +08:00
    @aitaii 好的,谢谢,有方向了
    @lower 好的,用定时加延时的方法看看。后期根据业务再调整
    @vicalloy 谢谢
    @dzdh 谢谢,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1921 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.