由于netty处理程序堆栈中抛出的任何异常都会生成一个上游事件并最终在处理程序中调用exceptionCaught,因此异常将不会到达未捕获的异常处理程序。甚至在exceptionCaught方法中重新抛出该异常也无济于事(因为netty再次处理它)。我想抛出(部分或全部)来自exceptionCaught方法的未经检查的异常。有没有办法做到这一点?
答案 0 :(得分:3)
没有办法做到这一点。你唯一能做的就是处理ExceptionCaught中的Exception。为什么这对你来说是一个问题?
答案 1 :(得分:0)
我必须同意诺曼,我有类似的问题。我创建了一个exceptionCaught()方法,并在其中调用了我的异常处理例程。我遇到的问题是我的异常处理例程试图进行清理并调用其他Netty方法,但这导致Netty被挂起。
我的修复是从exceptionCaught()内部创建一个新的Thread,它调用我的异常处理例程并从exceptionCaught()返回简单。这允许Netty的异常处理完成并恢复正常的Netty操作。在调用任何其他Netty函数之前,您需要在新线程中放置1秒的延迟。这将确保netty的异常处理在我的新线程开始清理并调用其他netty函数之前完成。这看起来有点过度,但它可以起作用并避免竞争条件。