Wie Norman und Veebs haben beide erwähnt, ohne die genauen Anforderungen zu verstehen, es ist ein wenig kompliziert aber eine genaue Antwort zu geben .... ich folgendes denken eine generische Art und Weise liefert Server-Fehler zu behandeln, die Sie nicht erwartet hatten. Er gibt einen HTTP 500 "Interner Serverfehler" an den Client zurück und schließt dann den Kanal. Offensichtlich gehe ich davon aus, dass Ihre Kunden HTTP anfordern und empfangen, was sie möglicherweise nicht sind. In diesem Fall ist Veebs 'Lösung besser.
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;
public class ServerErrorHandler extends SimpleChannelHandler {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
HttpResponse err = new DefaultHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.INTERNAL_SERVER_ERROR);
e.getChannel().write(err).addListener(ChannelFutureListener.CLOSE);
}
}
Hinweis Wenn Sie diese Lösung verwenden, dann müssen Sie auch eine HttpResponseDecoder zu Ihrer Pipeline hinzuzufügen.
Offensichtlich, wenn Sie bestimmte Ausnahmen haben, die Sie fangen und behandeln möchten, würden Sie etwas zusätzliche Logik hier schreiben, um das zu tun.
HTH!