4

我们试图使用事件总线在 Verticle 之间建立通信。我们尝试了最简单的乒乓通信示例——

public class Sender extends AbstractVerticle {
    public static void main(String[] args) {
        Vertx.clusteredVertx(new VertxOptions(),res->{
            res.result().deployVerticle(new Sender());
        });
    }
    @Override
    public void start() throws Exception {
        EventBus eb = vertx.eventBus();
        vertx.setPeriodic(1000, v -> {
            eb.send("ping-address", "ping!", reply -> {
                if (reply.succeeded()) {
                    System.out.println("Received reply: " + reply.result().body());
                } else {
                    System.out.println("No reply");
                }
           });
        });
    }
}

同样我们写了写receiver。见代码

如果发送方和接收方都在同一台机器上运行,则通信成功。但是当它们运行不同的机器时,通信失败。此外,这似乎不是 Hazelcast 集群管理器(我们使用的)的问题,因为 hazelcast 正确地发现了两台机器上的另一个对等点(这从 hazelcast 的控制台日志中可以明显看出)。

Members [2] {
    Member [192.168.43.12]:5701
    Member [192.168.43.84]:5701 this
}

此外,两台机器上的防火墙都没有启用,我们能够仅使用 hazelcast(不使用 vertx)在同一台机器之间建立通信,并且效果很好(例如this)。所以可能问题出在vert-x上。

4

1 回答 1

0

您是否尝试在 VertxOptions 上设置 setClustered(true)?我正在测试这个示例代码,它对我来说很好:

public static void main(String[] args) {
    VertxOptions op = new VertxOptions();
    op.setClustered(true);
    Vertx.clusteredVertx(op, e -> {
        if (e.succeeded()) {
            HelloWorldVerticle hwv = new HelloWorldVerticle();
            e.result().deployVerticle(hwv);
        } else {
            e.cause().printStackTrace();
        }
    });
}
于 2015-12-15T13:12:41.753 回答