【发布时间】: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/…。