首页 新闻 赞助 找找看

java动态时间发送短信

0
悬赏园豆:100 [已解决问题] 解决于 2022-12-09 15:11

每条短信记录有一个计划发送时间,除了每秒扫表,扫到计划发送时间小于当前时间就执行发送,还有别的解决方案吗

问题补充:

数据量在百万

我恰芙蓉王的主页 我恰芙蓉王 | 初学一级 | 园豆:190
提问于:2022-08-23 17:25
< >
分享
最佳答案
0

创建待发送记录表和发送记录表,每次短信初始化到待发送记录表,定时任务扫描待发送记录表,发送成功后从待发送记录表中删除,插入到发送记录表,发送记录表做分表处理

我恰芙蓉王 | 初学一级 |园豆:190 | 2022-12-07 09:28
其他回答(5)
0

优化一下
把短信记录存储到redis,新增/修改的短信记录都会同步到redis。
然后,定时任务定时去扫redis,发送过的移除,同步redis。

思路没变,就是提升一下性能。

参考:

收获园豆:100
智客工坊 | 园豆:1855 (小虾三级) | 2022-08-23 18:59

扫redis,就需要把mysql的查询条件当作key吧,例如短信的发送时间对应短信的发送信息,这样单条的缓存。或者就是一个key对应一个集合,但是这样每次需要把这个集合取出来遍历,查询符合条件的,修改发送时间和删除某一条都需要取出来遍历操作

支持(0) 反对(0) 我恰芙蓉王 | 园豆:190 (初学一级) | 2022-08-30 09:47
1
  1. redis 订阅发布功能
  2. 消息中间件
    这两种不用定时扫秒,当到达指定时间后,会主动推送过来,自己接收处理就行了,延时低,稳定。
低学历程序员 | 园豆:108 (初学一级) | 2022-08-25 10:08

redis发布订阅和队列支持每条记录动态时间推送吗,中途要支持修改发送时间和删除

支持(0) 反对(0) 我恰芙蓉王 | 园豆:190 (初学一级) | 2022-08-30 09:52
0

可以做一个队列,当有新的短信进入队列时,回调发短信方法,该方法会发送队列中的短信,直到队列为空。

会长 | 园豆:12401 (专家六级) | 2022-08-25 17:45

现在问题就是怎么动态时间进入队列

支持(0) 反对(0) 我恰芙蓉王 | 园豆:190 (初学一级) | 2022-08-30 09:53

@我恰芙蓉王: 没太明白你说的“动态时间”是什么意思。发短信的发现者往队列里放入短信时就触发检查程序,检查程序把队列里的短信都发出去

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2022-08-30 10:07

@会长: 就是我早上10点设置下午3点要发1W条短信、下午4点要发2W条短信,我该在什么时候把短信放入队列

支持(0) 反对(0) 我恰芙蓉王 | 园豆:190 (初学一级) | 2022-08-31 09:47

@我恰芙蓉王: 哦,原来是这样,那只能定时扫描了,可用用现成的组件Quartz.NET,我没看过它的源码,你有兴趣看看吧,可能也是定时扫描,用此组件比自己写靠谱

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2022-08-31 10:04

@会长: 还是谢谢解答

支持(0) 反对(0) 我恰芙蓉王 | 园豆:190 (初学一级) | 2022-08-31 10:37
0

用xxljob 定时任务

DanBrown | 园豆:1321 (小虾三级) | 2022-09-13 16:24
0

可用户rabbit mq延时交换机或列信队列来实现,定时器2个小时(时间可以自己定,不用频繁的扫表)扫一次表,把还有2小时就要发送的短信放到交换机或列信队列中,延时的时间一到监听消息发送短信就行了。
优点:

  1. 不用频繁的扫表
  2. 精准时间发送
码农记事本 | 园豆:204 (菜鸟二级) | 2023-01-05 17:36

好的,可以去了解一下,感谢解答

支持(0) 反对(0) 我恰芙蓉王 | 园豆:190 (初学一级) | 2023-01-06 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册