Vertx Eventbus无法在Java

时间:2015-06-22 15:25:15

标签: java vert.x

OS Linux JDK 1.7.0_67 Vert.x 2.1.5

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

由于手册想要尝试一个简单的Sender< - >接收器示例,通过EventBus。几个小时后,没有ping,也没有你好世界。

任何人都有一个想法,我在这个简单的代码上缺少的东西:

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

答案 0 :(得分:6)

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

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

答案 1 :(得分: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()));