2023-08-31

82 阅读2分钟

活动开始前一小时通知解决方案

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的延时队列进行操作(待实现。。。)