我刚开始工作的公司有一个系统。该系统允许客户通过SMS管理其订户通知。用户通过Web应用程序登录并创建消息(每条消息都有发送date_time,目标phone_number等)。这些消息保存在mysql数据库中。他们还有一个使用jsvc实现的java应用程序。此应用程序每1分钟24/7不间断地读取数据库并发送消息(通过外部网络提供程序API),即用于应在该特定时间发送的消息。
我被引进来重写整个事情。目前我无法更改任何涉及Web应用程序和数据库的内容。我只是尝试使用vertx重写jsvc。
我已经编写了与db通信的vertx服务以及与外部API通信的另一个服务。
我想过创建一个每小时运行一次的周期函数(它读取数据库并获取应该在接下来的一小时内发送的所有消息),然后安排将这些消息发送到与外部API通信的服务。
我的问题是,我将如何实现这样的安排?每条消息的发送日期时间精确到数据库中的分钟。我正在看Chime以及如何合并它但我没有看到一个很好的例子来帮助我知道正确的方法。
那么,使用Chime将eventbus消息调度到外部API服务的正确方法是什么呢?还有另一种方法可以构建这个用例吗?
Vert.x为您提供setPeriodic()
。
您可以每小时运行一项工作,例如:
vertx.setPeriodic(1000 * 60 * 60, (l) -> {
// Your code here
});
查看用于调度的Java计时器或RabbitMQ客户端。
public void timerSchdule() {
TimerTask repeatedTask = new TimerTask() {
public void run() {
System.out.println("performing activity on " + new Date());
}
};
Timer timer = new Timer("Timer");
long delay = 1000L;
long period = 1000L * 60L * 60L * 24L;
timer.scheduleAtFixedRate(repeatedTask, delay, period);
}