Vertx Eventbus не работает в Java

ОС Linux JDK 1.7.0_67 Vert.x 2.1.5

Просто приступим к подключению некоторых примеров из vertx, найденных на github.

Из-за руководства хочу попробовать простой пример Sender <-> Receiver, через EventBus. Много часов спустя ни пинг, ни здравствуй мир.

У любого есть идея, чего мне не хватает в этом простом коде:

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

2 ответа

Решение

То, как вы управляете вершинами, они не смогут видеть друг друга. По сути, они запускаются как совершенно отдельные процессы с отключенной кластеризацией (по умолчанию). Вы должны запустить вершины в кластерном режиме, чтобы они могли найти и общаться друг с другом. Использовать -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()));
Другие вопросы по тегам