基于 Java 通知类的功能模块设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
samin
V2EX    Java

基于 Java 通知类的功能模块设计

  •  
  •   samin 2021-02-10 23:39:59 +08:00 2637 次点击
    这是一个创建于 1772 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    根据设置会给用户生成一系列任务,有任务开始时间任务结束时间,在这段时间内执行完成,才算是正常完成任务,否则逾期。

    需求

    后台管理界面设置在任务结束时间前 N 分钟向用户发起提醒推送。

    实际用例

    前提

    1. A 用户被下达了一个 9:00 ~ 10:00 的任务
    2. 后台设置了 10 分钟的提醒功能

    结果

    A 用户在 9:50 会收到一条任务即将结束的通知

    痛点

    寻求目前业界常用的做法是啥 ? 没有做过这类功能的开发。

    我目前的解决思路

    方案一

    服务器端做轮询操作,每隔一段时间去扫描所有的任务,符合条件的通过极光推送至客户端,通过 Wobsocket 通知 Browser 后台管理端。

    方案二

    服务端做定时任务,每个任务生成的时候,自动生成一个距离结束前 N 分钟的定时任务,到时间了自动触发,通过极光推送至客户端,通过 Wobsocket 通知 Browser 后台管理端。

    方案三(只能适配客户端)

    服务端向手机 APP 端下发提醒参数,APP 端拉取用户所有进行中的任务,APP 端监听任务进行任务提醒功能。

    总结

    个人比较偏向方案三,只做客户端的提醒功能,后台管理其实不需要知道这个提醒,只需要关注结果,可以消耗更少的服务器资源实现这个需求。

    6 条回复    2021-02-12 22:52:57 +08:00
    JohnZorn
        1
    JohnZorn  
       2021-02-10 23:55:25 +08:00   1
    直接延时队列有什么问题吗
    icql
        2
    icql  
       2021-02-10 23:56:55 +08:00 via iPhone
    这不是延时消息 /队列干的事儿嘛,生成任务时发个延时消息就好了
    luozic
        3
    luozic  
       2021-02-11 00:03:59 +08:00 via iPhone
    actor 模型,非常合适这种消息
    mmdsun
        4
    mmdsun  
       2021-02-11 00:32:09 +08:00 via Android
    "
    A 用户被下达了一个 9:00 ~ 10:00 的任务
    后台设置了 10 分钟的提醒功能
    结果

    A 用户在 9:50 会收到一条任务即将结束的通知"

    你这个就是指定时间触发一个通知操作,用任务调度框架也能实现。
    wangyanrui
        5
    wangyanrui  
       2021-02-11 00:36:13 +08:00 via iPhone   1
    小项目直接用 redis 的 zset,大点的上个延时队列,客户端轮训即可,尽量不要客户端实现全部逻辑,否则后期想改动逻辑的话比较困难
    samin
        6
    samin  
    OP
       2021-02-12 22:52:57 +08:00
    综合想了一下,直接采用 CRON 工程做掉
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2540 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:51 PVG 20:51 LAX 04:51 JFK 07:51
    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