Vert.x 2 - >通过EventBus进行Vert.x 3通信

时间:2015-09-29 07:57:12

标签: vert.x

我有一个简单的问题 - 是否有人试图在集群中运行Vert.x 2和Vert.x 3应用程序,通过EventBus进行通信?

理论上它应该是可能的但有人做过吗?;)

干杯, 米哈尔

3 个答案:

答案 0 :(得分:3)

对于3.3版本,Vert.x正在向2.x系列添加一个新模块。这个新组件是mod-eventbus3-bridge-client

我们的想法是,您可以在现有的2.x应用程序中部署此模块,它将在eventbus 2.x和eventbus 3.x之间架起桥梁。

您可以在以下位置查看代码:https://github.com/vert-x/mod-eventbus3-bridge-client/tree/initial-work

所以在Vert.x3中你需要这样做:

public class Example {

  public static void main(String[] args) {

    Vertx vertx = Vertx.vertx();
    TcpEventBusBridge bridge = TcpEventBusBridge.create(
        vertx,
        new BridgeOptions()
            .addInboundPermitted(new PermittedOptions())
            .addOutboundPermitted(new PermittedOptions()));

    bridge.listen(7000, res -> {
      // example: vertx3 send a message to vertx2
      vertx.eventBus().send("send3", new JsonObject().put("msg", "hello send"));
    });
  }
}

在Vert.x2上你会做相反的事情:

public class Example extends Verticle {

  @Override
  public void start() {
    final EventBus3 eb = new EventBus3(vertx, getContainer().config(), new Handler<Void>() {
      @Override
      public void handle(Void done) {
        // case #1 vertx3 send a message to vertx2
        eb.registerHandler("send3", new Handler<BridgeMessage>() {
          @Override
          public void handle(BridgeMessage msg) {
            System.out.println(msg.body());
          }
        });
      }
    });

    eb.exceptionHandler(new Handler<Throwable>() {
      @Override
      public void handle(Throwable throwable) {
        throwable.printStackTrace();
      }
    });
  }
}

答案 1 :(得分:1)

我非常感谢这个问题,因为当我决定将 2.x 应用程序升级到最新版本的 Vert.x 时,我个人也有同样的想法。 ,即 3.x

我猜你暴露出这样的问题,因为节点间/模块间通信协议至少应该在某种程度上兼容,EventBus已经是典型的 Vert.x 应用程序,即使在不同的模块版本之间,也应该抽象出消息传输。

同时我不知道任何主要版本之间提供API兼容性的开源产品,因为主要版本通常表示“API将更改” Vert.x 应该没有例外,并且毫不奇怪,在不同版本中开发的Verticle /模块之间的通信可能会失败,因此即使不值得测试,也应该避免这种方法。 / p>

答案 2 :(得分:-1)

我在群集中尝试了Vert.x2和Vert.x3 EventBus。但不是在同一时间。 Vert.x2需要jdk 1.7和Vert.x3需要jdk 1.8或更高版本。我试图在jdk 1.8中运行Vert.x2,但那并没有成功。

因此,我认为在集群中运行Vert.x2和Vert.x3应用程序是不可能的。