我有一个简单的问题--是否有人试图在集群中同时运行Vert.x2和Vert.x3应用程序,并通过EventBus进行通信?
理论上这应该是可能的,但有人做过吗?)
干杯,米哈ł
发布于 2015-09-30 08:35:15
我非常感谢这个问题,因为当我决定将我的2.x应用程序升级到最新版本的Vert.x,即3.x版本时,我就有了同样的想法。
我猜您暴露出了这样一个问题,因为节点间/模块间通信协议至少应该在某种程度上兼容,而且EventBus已经是典型Vert.x应用程序中的模块间通信通道,即使在不同的模块版本之间也需要抽象消息传输。
同时,我不知道有什么开源产品可以提供主要版本之间的API兼容性,因为主要版本通常表示“API将改变”。Vert.x也不例外,在不同版本中开发的眩晕/模块之间的通信可能失败也就不足为奇了,因此即使不值得测试,也应该避免这样的方法。
发布于 2016-04-19 08:24:12
对于3.3发行版,Vert.x正在向2.x系列中添加一个新模块。这个新组件是mod-eventbus3-bridge-client。
其思想是,您可以沿着现有的2.x应用程序部署此模块,它将在事件总线2.x和事件总线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();
}
});
}
}发布于 2015-11-11 10:03:25
我已经尝试过集群中的Vert.x2和Vert.x3 EventBus。但不是同时。Vert.x2需要JDK1.7,Vert.x3需要JDK1.8或更高版本。我试图在JDK1.8中运行Vert.x2,但没有成功。
因此,我认为不可能在集群中同时运行Vert.x2和Vert.x3应用程序。
https://stackoverflow.com/questions/32838688
复制相似问题