如何在 Eclipse Vert.x 中执行长 running/polling 操作

How to execute long running/polling operations in Eclipse Vert.x

我有一个场景,我们需要继续为所有活动用户轮询数据库 table 并执行 api 调用以从他们的收件箱中获取任何未读的电子邮件。我的方法是使用两个 Verticle,一个用于轮询,另一个用于为用户获取电子邮件。当第一个 Verticle 找到用户时,通过事件总线向第二个 Verticle 发送消息(userId)以获取电子邮件。这样,当有很多用户时,我可以增加所需的第二个 Verticle 实例的数量。

我发现可以通过以下两种方式轮询数据库中的活跃用户,然后为每个用户执行 api 调用。

  1. vertx.setPeriodic
  2. 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());
        });
    }
}