如何在 Eclipse Vert.x 中执行长 running/polling 操作
How to execute long running/polling operations in Eclipse Vert.x
我有一个场景,我们需要继续为所有活动用户轮询数据库 table 并执行 api 调用以从他们的收件箱中获取任何未读的电子邮件。我的方法是使用两个 Verticle,一个用于轮询,另一个用于为用户获取电子邮件。当第一个 Verticle 找到用户时,通过事件总线向第二个 Verticle 发送消息(userId)以获取电子邮件。这样,当有很多用户时,我可以增加所需的第二个 Verticle 实例的数量。
我发现可以通过以下两种方式轮询数据库中的活跃用户,然后为每个用户执行 api 调用。
- vertx.setPeriodic
- vertx.executeBlocking
但是在手册中,它提到对于长时间的 running/polling 任务,最好创建一个应用程序管理的线程来处理任务。
我解决问题的方法是否正确,或者是否有更好的方法来解决手头的问题?
如果我通过一个应用程序管理的线程,你能帮忙举例说明吗?
谢谢。
您可以为此创建一个专用的工作线程池,运行您的定期任务:
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());
});
}
}
我有一个场景,我们需要继续为所有活动用户轮询数据库 table 并执行 api 调用以从他们的收件箱中获取任何未读的电子邮件。我的方法是使用两个 Verticle,一个用于轮询,另一个用于为用户获取电子邮件。当第一个 Verticle 找到用户时,通过事件总线向第二个 Verticle 发送消息(userId)以获取电子邮件。这样,当有很多用户时,我可以增加所需的第二个 Verticle 实例的数量。
我发现可以通过以下两种方式轮询数据库中的活跃用户,然后为每个用户执行 api 调用。
- vertx.setPeriodic
- vertx.executeBlocking
但是在手册中,它提到对于长时间的 running/polling 任务,最好创建一个应用程序管理的线程来处理任务。
我解决问题的方法是否正确,或者是否有更好的方法来解决手头的问题? 如果我通过一个应用程序管理的线程,你能帮忙举例说明吗?
谢谢。
您可以为此创建一个专用的工作线程池,运行您的定期任务:
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());
});
}
}