2016-07-21 27 views
0

クラスタ化されたvert.xでメッセージを他のホストに送信しようとしています。 1つのコンピュータで次のコードを2回実行することはできますが、2つのホストを使用すると失敗します(メッセージは受信されません)。私はHazelcastでVert.x 3.3.1を使用します。スレーブ側のログを、別のホスト上で実行していました。そこには、お互いを見つけて接続しているようです。ネットワーク経由でVert.xメッセージを送信できません

入力に感謝します!別のホスト上で実行されているスレーブの

ワーカー

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 
} 
+0

'-cluster'スイッチでvertexプロセスを実行していますか? –

+0

プログラムを次のように起動します: 'java -jar vertxtest.jar -cluster' – timmiotooltim

+0

両方のホストからもう一方のポート5701にtelnet ipポートを試すことができますか?私はそれが接続されているが、ちょうど確かめることをHZの報告を知っている... –

答えて

0

(あなたのログは、両方のノードを発見することを示してHazelcastが正常に動作しているようですあなた自身が2人のメンバーを持っているからです)。起こっていることは、ホストJVM上のホスト名解決が内部IPアドレスを返すことであり、各ノードは他のノードに接続できないということです。このコマンドを使用することができます右のデバイスを指定するために

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

クラスタの起動時にファイアウォールを緩和する必要がありますのでvert.xが空きポートを選択することに注意、または必要に応じてください

java -jar vertxtest.jar -cluster -cluster-host <your.ip> -cluster-port 5800 
+0

私は正確な問題に直面しています。 2つの異なるドッカーコンテナで動作するコード例がありますか? – Gadi

関連する問題