Tak jak wspomnieli Norman i Veebs, bez zrozumienia dokładnych wymagań, trochę trudniej jest udzielić precyzyjnej odpowiedzi ... Myślę, że poniższe informacje zapewniają ogólny sposób radzenia sobie z błędami serwera, których się nie spodziewałeś. Zwraca klientowi błąd HTTP 500 "Wewnętrzny serwer", a następnie zamyka kanał. Oczywiście zakładam, że twoi klienci żądają i odbierają za pośrednictwem HTTP, które mogą nie być, w takim przypadku rozwiązanie Veebs jest lepsze.
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);
}
}
Uwaga: jeśli użyjesz tego rozwiązania, będziesz musiał dodać HttpResponseDecoder do swojego potoku.
Oczywiście, jeśli masz określone wyjątki, które chcesz przechwycić i obsłużyć, wpisz tutaj dodatkową logikę.
HTH!