我有一个接受 REST 请求的 Verticle,通过事件总线从其他 Verticle 获取数据并响应客户端。
vertx.exceptionHandler(event -> logger.error("Vertx exception ", event));
router.get("/api/v1/:param").handler(this::routerHandler);
public void routerHandler(RoutingContext rc) {
vertx.eventBus().request("data", param,
result -> {
if (result.succeeded()) {
logger.info("Request handled successfully");
// intentionally creating exception body() will return String
JsonObject jsonObject = (JsonObject) result.result().body();
rc.response().end(jsonObject)
}else{
logger.error("Request failed");
}
}
当引发异常时,它会在我在 vertx 实例中设置的异常处理程序中打印,但之后 vertx 不会立即向客户端报告异常,而是等待超时(30 秒)发生。
我尝试将错误处理程序附加到路由器对象并将故障处理程序附加到路由对象,但没有任何帮助立即向客户端报告异常。我知道我可以尝试 catch 并在 catch 块中报告错误。但是我想知道是否有任何其他方法来处理这个问题,比如 Servlet 或 Spring MVC 报告给客户端,即使代码中没有处理异常。
router.errorHandler(500,routingContext -> {
System.out.println(routingContext.failed());
routingContext.response().end("Exception ");
});
router.route().handler(BodyHandler.create()).failureHandler(routingContext -> {