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

时间:2016-06-10 17:07:46

标签: java undertow

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

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

这对性能很有帮助,但它在处理错误处理方面存在问题。我创建了一个自定义的ErrorHandler,它将Java异常映射到HTTP响应类型和日志级别,并允许API处理程序自己冒泡异常而不用担心处理它们。不幸的是,对于调度到工作线程的请求,它们永远不会进入ErrorHandler,如果它们抛出异常,总是会导致500错误。有没有办法捕获从工作线程抛出的异常,或者我是否必须在每个API处理程序中实现异常处理?

1 个答案:

答案 0 :(得分:1)

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