无法使用事件总线与在不同计算机上运行的Verticle进行通信

时间:2015-12-14 14:46:01

标签: java event-bus vert.x vertx3

我们试图使用事件总线建立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");
                }
           });
        });
    }
}

同样我们写了写接收器。 See the code

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

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

此外,两台计算机上都没有启用防火墙,我们只能使用hazelcast(不使用vertx)在相同的计算机之间建立通信,并且它完美运行(例如this)。 所以问题可能在于vert-x。

1 个答案:

答案 0 :(得分:0)

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

params = {
    origin: "37.88818,-4.77938",
    destination: "36.51903,-6.28014",
    waypoints:"36.72126,-4.42"
}