【问题标题】:Vert.x : How can i catch exception in handler onSuccess?Vert.x:如何在处理程序 onSuccess 中捕获异常?
【发布时间】:2022-11-11 10:45:01
【问题描述】:

这是我的代码:

    private static void testExceptionInHandle() {
        try {
            var handler = future().onSuccess(v -> {
                throw new RuntimeException("hello exception");
            }).onFailure(e -> {
                System.out.println("onFailure:" + e.getMessage());
            });
        } catch (Exception e) {
            System.out.println("catch:" + e.getMessage());
        }
    }

我想知道一个不可预测的异常发生了什么,但什么也没得到。

这会导致路由处理方法无法正确结束。

【问题讨论】:

    标签: vert.x


    【解决方案1】:

    这种运行时问题通常会出现在 Vert.x 上下文或 Vert.x 本身的异常处理程序中(默认情况下,它只是记录异常)。

    为确保路由过程完成,您应该在路由上设置TimeoutHandler

    否则,您可以尝试使用其他编程模型,例如 Mutiny 或 RxJava。任何运行时异常都会报告给订阅者(然后当然会终止订阅)。

    【讨论】:

      【解决方案2】:

      您可以在路由上定义 failureHandler 并捕获所有运行时异常。更多详情:https://vertx.io/docs/apidocs/io/vertx/ext/web/Route.html#failureHandler-io.vertx.core.Handler-

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        相关资源
        最近更新 更多