【问题标题】:Vertx multithreaded worker verticle doesn't process messages in parallelVertx 多线程工作者 Verticle 不并行处理消息
【发布时间】:2015-10-07 15:06:34
【问题描述】:

我们使用 Vertx 3.0.0。

情况:

我们有带有 REST 处理程序的主 Verticle。

REST 处理程序通过事件总线调用工作人员,如下所示:

vertx.eventBus().send(
            "sample.data",
            "hello vert.x",
            r -> {
                System.out.println("[Main] Receiving reply ' " + r.result().body()
                        + "' in " + Thread.currentThread().getName());
            }
    );

我们有worker verticle,这就是我们执行这个verticle的方式:

vertx.deployVerticle("com.example.Worker",
                            new DeploymentOptions().setWorker(true).setMultiThreaded(true));

这里是 Worker 的实现:

public class Worker extends AbstractVerticle {


@Override
public void start() throws Exception {
    System.out.println("[Worker] Starting in " + Thread.currentThread().getName());

    vertx.eventBus().consumer("sample.data", message -> {
        System.out.println("[Worker] Consuming data in " + Thread.currentThread().getName());
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        String body = (String) message.body();
        message.reply(body.toUpperCase());
    });

}
}

如果我多次请求我的 REST 服务,那么所有消息都会在我们的 Worker 中按顺序处理。为什么多线程在这里不起作用?工人的多线程选项的目的是什么(从文档中不清楚它是如何工作的)?

顺便说一句,如果我使用部署选项执行多个 Worker 实例,那么我可以并行处理我的消息。例如,2 个 Worker 实例可以同时处理 2 条消息。

【问题讨论】:

    标签: java multithreading vert.x


    【解决方案1】:

    好的,在与 Vert.x 团队进行短暂调查后,这个问题似乎已在昨天的版本 v 3.1.0 中得到修复。 以下是关于这个主题的一些讨论: https://groups.google.com/forum/#!msg/vertx/JEAJbGGQgeI/uTLDtaHBCAAJ

    【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2016-06-06
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多