无法通过网络发送Vert.x消息

时间:2016-07-21 08:32:26

标签: java hazelcast vert.x

我正在尝试将群集vert.x中的消息发送到其他主机。在一台计算机上运行以下代码两次,但如果我使用两台主机,它将失败(未收到消息)。我使用带有Hazelcast的Vert.x 3.3.1。我在一个单独的主机上添加了从属端的日志,看起来它们似乎正在寻找并相互连接。

我感谢任何意见!

工人

public class WorkerVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
    System.out.println("Deployed " + getClass().getName());
    vertx.eventBus().<String> consumer("TEST_ADDRESS", this::doWork);
}
private void doWork(Message<String> msg) {
    String workItemString = msg.body();
    System.out.println("Got Work:" + workItemString);
}
}

Mainclass

public class Starter {
Vertx vertx;

public Starter(boolean slave) {
    VertxOptions options = new VertxOptions();
    options.setClustered(true);
    Future<Void> completer1 = Future.future();
    Vertx.clusteredVertx(options, res -> {
        if (res.succeeded()) {
            vertx = res.result();
            completer1.complete();
            System.out.println("Opened clustered vertx");
        } else {
            System.out.println("Failed: " + res.cause() + ". Quitting now.");
            System.exit(-1);
        }
    });
    completer1.setHandler(new Handler<AsyncResult<Void>>() {
        @Override
        public void handle(AsyncResult<Void> event) {
            if (slave) {
                System.out.println("Deploying worker");
                vertx.deployVerticle(WorkerVerticle.class.getName());
            } else {
                System.out.println("publishing message");
                vertx.eventBus().publish("TEST_ADDRESS", "Test");
            }
        }
    });
}
}

在独立主机上运行的从站的示例日志

INFORMATION: [192.168.2.191]:5701 [dev] [3.6.3] Accepting socket connection from /192.168.2.3:55878
Jul 21, 2016 10:20:43 AM com.hazelcast.nio.tcp.TcpIpConnectionManager
INFORMATION: [192.168.2.191]:5701 [dev] [3.6.3] Established socket connection between /192.168.2.191:5701 and /192.168.2.3:55878
Jul 21, 2016 10:20:44 AM com.hazelcast.cluster.ClusterService
INFORMATION: [192.168.2.191]:5701 [dev] [3.6.3] 

Members [2] {
    Member [192.168.2.191]:5701 this
    Member [192.168.2.3]:5701
}

1 个答案:

答案 0 :(得分:1)

似乎Hazelcast工作正常(您的日志显示两个节点都发现自己,因为您有2个成员)。可能发生的是主机JVM上的主机名解析返回一些内部IP地址,然后每个节点都无法连接到其他节点。

要指定正确的设备,您可以使用以下命令:

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'

请注意,vert.x将在启动群集时选择一个空闲端口,因此您应该放松防火墙,或者如果您想要更安全,请指定vert.x使用哪个端口(除了来自hazelcast的5700):

java -jar vertxtest.jar -cluster -cluster-host <your.ip.address>