2016-07-21 24 views
0

Ich versuche, Nachrichten im gruppierten vert.x an andere Hosts zu senden. Das Ausführen des folgenden Codes zweimal auf einem Computer funktioniert, aber wenn ich zwei Hosts verwende, schlägt es fehl (Nachricht wird nicht empfangen). Ich benutze Vert.x 3.3.1 mit Hazelcast. Ich habe das Protokoll der Slave-Seite angehängt, das auf einem separaten Host läuft, wo es so aussieht, als würden sie sich finden und verbinden.Senden von Vert.x-Nachrichten über das Netzwerk nicht möglich

Ich bin dankbar für jede Eingabe!

Worker

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"); 
      } 
     } 
    }); 
} 
} 

Beispiel Protokoll der Slave auf separaten Host ausgeführt

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

Führen Sie die vertx-Prozesse mit dem Schalter '-cluster' aus? –

+0

Starten Sie das Programm wie folgt: 'java -jar vertxtest.jar -cluster' – timmiotooltim

+0

Könnten Sie versuchen, Telnet-IP-Port von beiden Host auf den anderen auf Port 5701? Ich weiß, HZ berichtet, es ist verbunden, aber nur um sicher zu gehen ... –

Antwort

0

Es scheint, dass Hazelcast ordnungsgemäß funktioniert (Ihre Protokolle zeigen, dass beide Knoten entdecken selbst, weil Sie 2 Mitglieder haben). Was passiert, ist, dass die Auflösung des Hostnamens auf der Host-JVM eine interne IP-Adresse zurückgibt und dann jeder Knoten keine Verbindung zu den anderen herstellen kann.

Um das richtige Gerät angeben, können Sie den Befehl:

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

Bitte beachten Sie, dass Vert.x einen freien Port wählen, wenn das Cluster starten, so dass Sie Ihre Firewall entspannen sollte, oder wenn Sie wollen Um sicherer zu sein, geben Sie auch an, welchen Port vert.x verwenden kann (neben 5700 von hazelcast) mit:

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

Ich bin mit genauem Problem konfrontiert. Haben Sie ein Codebeispiel zum Teilen, das in zwei verschiedenen Andockcontainern funktioniert? – Gadi