求友们帮助, Java 到期提醒功能如何开发

2023-07-28 10:39:53 +08:00
 Allenxup

现在是有个车辆信息表,表里有年检到期日期 inspection_date 和保险到期日期 insurance_date 字段,现在的需求是对这些时间进行监控剩余 15 天有效期进行消息提醒,推送通知给驾驶人员。想问下这场景应该怎么做?感谢

3103 次点击
所在节点    程序员
32 条回复
lsk569937453
2023-07-28 10:48:31 +08:00
每天定时任务扫描一下呗。
buchikoma
2023-07-28 10:58:09 +08:00
起一个永驻的后台进程,在设置 inspection_date 和 insurance_date 的时候,分别计算 Duration (多久秒之后到期),去后台进程注册这个任务并在 Duration 时间之后发送一条 message 给前台进程做推送,Duration 可以理解为一个 timeout
v2eb
2023-07-28 11:17:48 +08:00
Timer 就好了, 项目启动时候扫一下当天的, 定时任务每天扫, 扫出来用 Timer 处理
simonlu9
2023-07-28 11:22:07 +08:00
redis 延时队列
me1onsoda
2023-07-28 11:23:29 +08:00
延迟队列
Allenxup
2023-07-28 11:23:41 +08:00
@buchikoma 感谢解答。java 永驻的后台进程有什么实现方式嘛
brader
2023-07-28 11:25:34 +08:00
@simonlu9
@me1onsoda 延迟不太好吧,还是存表里,每天定时查询需要发送的信息好点。你存延时的话,他这种车辆年检,从录入到年检可能 6 年,这延时队列越堆越恐怖
xwayway
2023-07-28 11:25:52 +08:00
这不就是一个定时任务,每天扫一遍就行了的事么。延迟队列瞎 JB 扯淡,为了用中间件而用。
Allenxup
2023-07-28 11:26:59 +08:00
@simonlu9 放延时队列的话,如果我到期日期更新了要怎么处理呢
Allenxup
2023-07-28 11:28:04 +08:00
@brader 是的,我也是考虑到这一点。我这边还要驾驶证的到期提醒需求
buchikoma
2023-07-28 11:32:07 +08:00
@Allenxup #6 没用过 java ,但比较简单且通用的就是起一个 Supervisor 去监控进程,或者用 actor 这种模型
brader
2023-07-28 11:33:50 +08:00
@Allenxup 我以前做过类似的需求,通知表字段就记录一些标识、内容、通知时间之类的,每天在白天多少点发通知。我们做白天的话,一是不会打扰用户,二是我们接入的是厂商通知栏推送,有些厂商晚上是不允许你推送的
blackmirror
2023-07-28 11:35:45 +08:00
这不最简单的功能了,定时跑不就完了,还真要造火箭 啊
luomao
2023-07-28 11:37:28 +08:00
创建一个 Bean 然后写你的方法
@Scheduled(cron = "0 0 9 * * ?")
每天早上 9 点执行一遍,自己判断哪些需要发送,然后执行
sujin190
2023-07-28 11:38:14 +08:00
长时任务不要用暂时对接和计时器,否则就是个大坑,最靠谱最简单的还是每天执行个任务查询下满足条件的执行就好了
mdn
2023-07-28 11:40:01 +08:00
每天 9 点定时检测,>=15 && < 16 的发送短信
nkidgm
2023-07-28 11:55:20 +08:00
无必要放队列啊,每天定期扫表的时间字段,发现时间差在规定范围内,就触发通知程序。

新车年检有效期一般是 2 年,你不会提前 2 年就把年检的通知消息放到消息里面吧,你得保证 2 年期间这个消息不会丢失才行,还有队列被撑爆得情况。
Ericcccccccc
2023-07-28 11:56:09 +08:00
记住一点, 任何定期触发的功能靠的都是轮询.
nkidgm
2023-07-28 11:57:25 +08:00
最简单用 spring task 去执行 SQL 就行了。
mmdsun
2023-07-28 11:58:47 +08:00
每天跑,SQL 查 监控剩余 ∈[15, 16 ]天 , 查出来处理通知就可以了。

数据量大可以用那种支持 mapreduce 分片的任务框架,比如 PowerJob 框架,这个作者也在 v 站。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX