活动开始前一小时通知解决方案
1.从需求出发
从需求业务场景出发,因为校内活动过多或者参与活动的参与者(学生、老师)可能因为某些事情忘记参加约定的活动,那么我们就可以推出一个活动开始前一小时提醒的功能。
2.可行性
2.1技术方案
首先得考虑到是微服务还是非微服务。本项目属于项目初期,没有大量的用户量以及并发。那么无非用SpringBoot开发即可。
2.1.1 定时任务 + 扫表
我们实现这样的一个功能,那么第一个想到的就是通过将活动开始时间和被参与活动人员的id进行关联。然后通过定时任务和扫描数据库表。这种方式理论上是可行的。 优点 :实现起来简单,快捷。 缺点:如果后期活动参与记录数据量增大,那么扫表的时间会增加,而且不断的请求数据库。对数据库压力不小。带来的问题就是如果定时任务的频率开的太高,对数据库和程序压力大。定时任务频率开的太久那么会造成偏差不准确,通知时差过大的问题。(考虑对时效性的要求)
2.1.2 JDK自带的Timer
JDK中Timer的使用简单案例
public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("notify to the user" + new Date());
}
};
Timer timer = new Timer();
//delay时间为(活动开始时间 - 当前时间) - 1小时;
timer.schedule(timerTask, 1000);
}
在等待的过程中Java会新建一个线程去等待执行操作。到时间了即可通知。 优点:实现也是非常简单,实时性非常高。 缺点:如果相隔时间太长Timer线程就不断的阻塞很浪费,而且没创建一个Timer就要新建一个线程,那么系统性能会遭到影响。
2.1.3 MQ方案
2.1.3.1RabbitMQ(待补充)
2.1.3.2RocketMQ
MQ方案考虑到项目初期新增中间件和服务器的成本,先搁置。
2.1.4 Redis方案
利用Redis的延时队列进行操作(待实现。。。)