Java 在指定时间内发送邮件的问题

2019-10-31 11:44:16 +08:00
 greenhat233
最近有个需求,前台 vue,后端 Java




用户可以在自己喜欢的信息上面设置提醒,然后到用户指定的时间的话后台给用户发送提醒邮件,
这个在指定时间内发送指定邮件不知道有没有更好的方法,现有方法如下:
1. 写个死循环判断
2. 写类似这样的 0 1 1 * * ? 2015 cron 任务去执行,不过没有试过,意思大概是指定详细时间让这个任务只执行一次
3. Java 阻塞队列,延时队列(也未实践)

或者使用定时器什么的,mjj 们有什么更好的想法
1598 次点击
所在节点    问与答
7 条回复
aragakiyuii
2019-10-31 14:13:33 +08:00
quartz 呢,用户前台制定 x 时 x 分 x 秒,后台生成 cron 添加定时任务
javapythongo
2019-10-31 14:13:58 +08:00
写个时间轮,设置时间的时候,算一下 duration,以前写了个简单的,你可以参考下 github.com/fangxuee/timewheel
x66
2019-10-31 15:04:54 +08:00
如果最小粒度是每分钟,我建议启动一个 0 * * ? * * * 的 cron(每分钟)来扫描当前这一分钟的任务并执行。
v2orz
2019-10-31 15:16:27 +08:00
MQ 延时消息也能实现
sujin190
2019-10-31 15:36:49 +08:00
量不多精度要求也不高的话,crontab 其实挺好用的了,每分钟查询判断下就是了
延时队列的问题是无法撤回或者修改,也不是幂等的,容错要麻烦很多

https://github.com/snower/forsun

可以看看之前做的定时调度服务,可以通过一个 key 创建一个定时任务,重复创建幂等,可以方便的撤销修改,任务保存可以使用 redis 持久化任务信息,不担心丢失,最小秒级定时任务高效,支持 http 接口和超时触发请求 http 接口
lllllliu
2019-10-31 15:43:36 +08:00
消息队列延时消息,
还有 Redis 过期事件订阅,
EscYezi
2019-10-31 17:31:09 +08:00
起一个线程死循环 15s 扫描一次所有提醒是否距离发邮件的时间小于等于 15s,有的话调用发邮件接口

不过提醒多的话,调发邮件接口可能要弄个线程池

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

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

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

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

© 2021 V2EX