Vertx Eventbus 在 Java 中不工作

Vertx Eventbus not working in Java

OS Linux JDK1.7.0_67 Vert.x2.1.5

刚开始连接 github 上的一些顶点示例。

由于手册想要通过 EventBus 尝试一个简单的 Sender <-> Receiver 示例。许多小时后,没有 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");

  }
}

运行 在同一台机器上的单独 JVM 实例中,使用以下 CLI 命令:

vertx run Receiver.java
> Succeeded in deploying verticle

另一个控制台:

vertx run Sender.java
> Succeeded in deploying verticle

您 运行设置顶点的方式,它们将无法相互看到。它们本质上是作为完全独立的进程启动的,并且禁用了集群(默认)。您必须 运行 群集模式中的顶点,以便让它们定位并相互通信。使用 -cluster 选项启用 Hazelcast 集群。您可能还想指定 -host-port

如果在此之后您仍然发现偶数总线通信出现问题,请启用 Hazelcast 日志记录并确保两个节点相互看到。如果您的网络不支持多播,您可能需要更改 cluster.xml(Hazelcast 配置)。

可能对那些使用程序化集群方式的人有所帮助。 请检查您在 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()));