我使用Intellij调试运行Vert.X 3应用程序几乎有50%的时间,当我按下重启按钮时,我收到此错误:
我按此按钮重建/重启应用程序:
Apr 02, 2016 7:17:03 PM io.vertx.core.http.impl.HttpServerImpl
SEVERE: java.net.BindException: Address already in use
这意味着调试器没有杀死端口并在它准备好之前再次启动它。它变化很大。
我的gradle调试非常简单,我已经检查了仅限单实例选项。
有没有人知道如何在不引起这种竞争条件的情况下重新调试运行?
答案 0 :(得分:4)
您的Verticle必须使用Future
版本覆盖停止功能。
类似的东西:
public void stop(Future<Void> future) {
httpServer.close(ar -> {
if (ar.succeeeded()) { future.complete(); }
else {
future.fail(ar.cause());
}
});
}
答案 1 :(得分:3)
您是否正在关闭HTTPServer
&amp; Verticle
正确并在完成所有操作后向Vertx发出信号?
我有同样的问题(虽然在测试中),但通过正确关闭我的服务器和Verticle来解决它。
以下是一些示例代码(使用Rx
版本)
@Override
public void stop(Future<Void> stopFuture) {
httpServer.closeObservable()
.subscribe(
aVoid -> {
},
error -> {
logger.error("Could not shutdown HTTP Server ", error);
stopFuture.fail(error);
},
() -> {
logger.info("HTTP Server Shutdown");
stopFuture.complete();
});
}