当我启动新的clusteredVertx
时,集群管理器会在网络上找到其他节点,但分布式eventBus
无法看到测试地址上发布的消息。
例如,在启动新节点时:
VertxOptions options = new VertxOptions();
Vertx.clusteredVertx(options, res -> {
if (res.succeeded()) {
Vertx vertx = res.result();
}
自动发现其他节点
Members [4] {
Member [192.168.21.51]:5702
Member [192.168.21.51]:5703
Member [192.168.21.51]:5701
Member [192.168.25.8]:5701 this
}
但是当JsonObject消息在通道“test”上发布时,如下所示:
eventBus eB1 = vertx.eventBus()
JsonObject j = new JsonObject();
j.put("test1", "test2");
eB1.publish("test", j);
它没有被另一个节点上的接收器接收。
EventBus eB2 = vertx.eventBus();
System.out.println("Receiver start");
MessageConsumer<JsonObject> testChannel = eB2.consumer("test");
testChannel.handler(message -> {
System.out.println("Received: " + message.body().toString());
}
答案 0 :(得分:1)
来自here的解决方案是将群集选项设置为本地节点。
String ipAddress = Inet4Address.getLocalHost().getHostAddress();
VertxOptions options = new VertxOptions();
options.setClusterHost(ipAddress);