【问题标题】:How to handle exceptions thrown from Undertow worker threads?如何处理从 Undertow 工作线程抛出的异常?
【发布时间】:2016-10-11 17:53:30
【问题描述】:

我有一个运行嵌入式 Undertow 的 Web 服务,一些处理程序利用常见的 Undertow 模式将请求卸载到工作线程:

if (exchange.isInIoThread()) {
    exchange.dispatch(this);
}

这对性能很有好处,但在处理错误处理时会出现问题。我创建了一个自定义 ErrorHandler,它将 Java 异常映射到 HTTP 响应类型和日志级别,并允许 API 处理程序本身只是冒泡异常而不用担心处理它们。不幸的是,对于分派到工作线程的请求,它们永远不会进入 ErrorHandler,如果它们抛出异常,总是会导致 500 错误。有什么方法可以捕获工作线程抛出的异常,还是我必须在每个 API 处理程序中实现异常处理?

【问题讨论】:

  • 可以为每个线程设置UncaughtExceptionHandler来处理线程抛出的异常
  • 处理程序需要访问 HttpServerExchange 以获取失败的请求。如果我控制所有处理程序的代码,则可以将其传递进去,但是有很多内置处理程序可以使用,例如github.com/undertow-io/undertow/blob/master/core/src/main/java/…

标签: java undertow


【解决方案1】:

我最终在链的早期添加了一个处理程序,该处理程序立即将请求分派到工作线程。然后我在exchange.isInIoThread()检查之外添加了我的错误处理逻辑,确保错误处理程序和引发异常的处理程序始终在同一个线程上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多