有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用事件总线对运行在不同机器上的垂直体进行通信

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

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) 个答案

  1. # 1 楼答案

    您是否尝试在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();
            }
        });
    }