如何在Eclipse Vert.x中执行长时间运行/轮询操作

问题描述 投票:0回答:1

我有一种情况,我们需要继续轮询所有活动用户的数据库表,并执行api调用以从其收件箱中提取所有未读的电子邮件。我的方法是使用两个顶点,一个用于轮询,另一个用于为用户获取电子邮件。第一个垂直节点在找到用户后,会通过事件总线将消息(userId)发送到第二个垂直节点以获取电子邮件。这样,当用户很多时,我可以增加所需的第二个垂直实例的数量。

按照以下两种方式,我可以用来轮询数据库以查找活动用户,然后为每个用户执行api调用。

  1. vertx.setPeriodic
  2. vertx.executeBlocking

但是在手册中提到,对于长时间运行/轮询的任务,最好创建一个应用程序托管的线程来处理任务。

我解决问题的方法是正确的,还是有更好的方法来解决当前的问题?如果我经过一个应用程序托管线程,请提供示例帮助您进行说明。

谢谢。

microservices vert.x
1个回答
0
投票

您可以为此创建专用的工作线程池,并在其上运行定期任务:

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());
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.