我有一种情况,我们需要继续轮询所有活动用户的数据库表,并执行api调用以从其收件箱中提取所有未读的电子邮件。我的方法是使用两个顶点,一个用于轮询,另一个用于为用户获取电子邮件。第一个垂直节点在找到用户后,会通过事件总线将消息(userId)发送到第二个垂直节点以获取电子邮件。这样,当用户很多时,我可以增加第二个Verticle实例的数量。
以下两种方法可以发现我可以用来轮询数据库以查找活动用户,然后为每个用户执行api调用。
但是在手册中,它提到对于长时间运行/轮询的任务,最好创建一个应用程序托管的线程来处理任务。
我解决问题的方法是否正确,还是有更好的方法来解决当前的问题? 如果我浏览了应用程序托管线程,请帮助您举例说明。
谢谢。
答案 0 :(得分:1)
您可以为此创建专用的工作线程池,并在其上运行定期任务:
public class PeriodicWorkerExample {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new MyPeriodicWorker(), new DeploymentOptions()
.setWorker(true)
.setWorkerPoolSize(1)
.setWorkerPoolName("periodic"));
}
}
class MyPeriodicWorker extends AbstractVerticle {
@Override
public void start() {
vertx.setPeriodic(1000, (r) -> {
System.out.println(Thread.currentThread().getName());
});
}
}