4

イベント バスを使用してバーティクル間の通信を確立しようとしていました。最も単純なピンポン通信の例を試してみました -

public class Sender extends AbstractVerticle {
    public static void main(String[] args) {
        Vertx.clusteredVertx(new VertxOptions(),res->{
            res.result().deployVerticle(new Sender());
        });
    }
    @Override
    public void start() throws Exception {
        EventBus eb = vertx.eventBus();
        vertx.setPeriodic(1000, v -> {
            eb.send("ping-address", "ping!", reply -> {
                if (reply.succeeded()) {
                    System.out.println("Received reply: " + reply.result().body());
                } else {
                    System.out.println("No reply");
                }
           });
        });
    }
}

同様に、レシーバーを書きました。コードを参照してください

送信側と受信側の両方が同じマシンで実行されている場合、通信は成功します。しかし、それらが異なるマシンで実行されている場合、通信は失敗します。また、hazelcast は両方のマシンで他のピアを正しく検出するため (これは、hazelcast のコンソール ログから明らかです)、Hazelcast クラスター マネージャー (使用したもの) の問題ではないようです。

Members [2] {
    Member [192.168.43.12]:5701
    Member [192.168.43.84]:5701 this
}

また、両方のマシンでファイアウォールが有効になっておらず、hazelcast のみを使用して (vertx を使用せずに) 同じマシン間の通信を確立でき、完全に機能しました (たとえば、この)。したがって、問題はおそらく vert-x にあります。

4

1 に答える 1

0

VertxOptions で setClustered(true) を設定してみましたか? 私はこのサンプルコードをテストしていましたが、私にとっては問題なく動作します:

public static void main(String[] args) {
    VertxOptions op = new VertxOptions();
    op.setClustered(true);
    Vertx.clusteredVertx(op, e -> {
        if (e.succeeded()) {
            HelloWorldVerticle hwv = new HelloWorldVerticle();
            e.result().deployVerticle(hwv);
        } else {
            e.cause().printStackTrace();
        }
    });
}
于 2015-12-15T13:12:41.753 に答える