web 项目 针对多个用户定时提醒的功能讨论 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
buyerhou
V2EX    问与答

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

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

    现在有一个需求,是对系统中的每个用户设置用药提醒,每个用户可能有多个时间点去提醒, 怎么开发这个功能,项目使用 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     Solana     1222 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:19 PVG 01:19 LAX 09:19 JFK 12:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86