Vertx事件总线在Java中无法工作。

3

操作系统:Linux JDK 版本:1.7.0_67 Vert.x 版本:2.1.5

我开始尝试使用github上找到的一些vertx示例。

由于手册中想要尝试一个简单的EventBus发送方和接收方示例,但是多个小时过去了,没有收到ping消息,也没有看到hello world的输出。

有人知道我在这个简单的代码中遗漏了什么吗:

Sender.java

import org.vertx.java.platform.Verticle;

public class Sender extends Verticle {

  public void start(){
    vertx.eventBus().send("ping-address", "Hello");
  }
}

Receiver.java

import org.vertx.java.core.Handler;
import org.vertx.java.core.eventbus.EventBus;
import org.vertx.java.core.eventbus.Message;
import org.vertx.java.platform.Verticle;

public class Receiver extends Verticle {

  public void start() {
    EventBus eb = vertx.eventBus();
    eb.registerHandler("ping-address", new Handler<Message<String>>(){
        @Override
        public void handle(Message<String> message) {
            container.logger().info("Message: "+message.body());
        }
    });

    container.logger().info("PingVerticle started");

  }
}

使用以下CLI命令在同一台机器上分别在不同的JVM实例中运行:

vertx run Receiver.java
> Succeeded in deploying verticle

另一个控制台:

vertx run Sender.java
> Succeeded in deploying verticle
2个回答

6
你目前运行顶点的方式会使它们无法相互通信。它们实际上是作为完全分离的进程启动的,群集被禁用了(默认情况下)。你需要在群集模式下运行顶点,才能让它们定位并相互通信。使用-cluster选项启用Hazelcast群集,你可能还需要指定-host-port
如果在此之后仍然遇到总线通信问题,请启用Hazelcast日志记录,并确保两个节点相互看到。如果你的网络不支持多播,你可能需要修改cluster.xml(Hazelcast配置)。

顺便说一下,这个问题已经在Vert.x Google组上得到了无数次回答。 - kuujo
谢谢,这救了我的一天。不明白为什么官方文档没有提到这个选项是使用事件总线必备的。 - AdemC
我知道!我们会尽力确保在Vert.x 3中有关集群的文档更清晰。当我第一次尝试使用它时,我也遇到了完全相同的问题! - kuujo

2

对于那些使用编程方式进行聚类的人可能会有所帮助。请检查您的vertx选项中是否设置了以下值:

VertxOptions options = new VertxOptions().setClustered(true)
                .setClusterHost("198.12.12.12")
                .setHAEnabled(true)
                .setHAGroup("dev");

 Vertx.clusteredVertx(options, res -> System.out.println(res.succeeded()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接