2015-12-14 66 views
2

我們試圖使用事件總線在垂直版本之間建立通信。我們嘗試了最簡單的乒乓通信示例 -使用事件總線在不同機器上運行的垂直版本無法通信

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

同樣我們寫了接收器。 See the code

如果發送方和接收方都在同一臺計算機上運行,​​則通信成功。但是,當他們運行不同的機器通信失敗。 此外,這似乎並沒有與Hazelcast集羣管理器(我們使用)的問題,因爲榛樹在兩臺機器上正確發現其他同行(這從榛樹控制檯日誌中可以明顯看出)。

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

而且防火牆還沒有在兩臺機器上啓用,並且我們能夠建立(不使用vertx)只使用hazelcast同樣的機器之間的通信,它完美地工作(例如this)。 所以可能問題是vert-x。

回答

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(); 
     } 
    }); 
} 
相關問題