gpt4 book ai didi

java - 对于在不同机器上运行的 Verticle,无法使用事件总线进行通信

转载 作者:搜寻专家 更新时间:2023-11-01 03:48:52 25 4
gpt4 key购买 nike

我们尝试使用事件总线在 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 上。

最佳答案

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

关于java - 对于在不同机器上运行的 Verticle,无法使用事件总线进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com