如何处理 Undertow 工作线程抛出的异常?

How to handle exceptions thrown from Undertow worker threads?

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

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

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

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