Zuul обеспечивает функции регистратора и маршрутизатора в системе микросервиса Springcloud, которая является незаменимой частью микросервисов. В дополнение к реализации файла файла по умолчанию, он также может настроить авторизацию, ограничение тока, проверку безопасности и т. Д., А маршрутизатор может полностью заменить обратный прокси Nginx. Обработка исключений Zuul осуществляется SenderRorFilter.
Во время нашего процесса подачи заявки мы обнаружили, что есть две проблемы, которые не очень дружелюбны для использования фильтра исключений по умолчанию:
1. Невозможно быстро определить, находится ли сервис, запрашивающий маршрут, истекнут или нет доступных узлов. Если возникает ошибка, вы можете просматривать журнал и найти его через стек;
2. Невозможно совместимы с пользовательскими форматами пакета ответов, такими как {code:500,msg:”xx error”} Формат.
Далее мы обсуждаем, как настроить обработку исключений, настраивать информацию о приглашении на исключение и т. Д.
Прежде всего, мы должны отключить SendErrorFilter по умолчанию. Чиновник предоставил конфигурацию коммутатора, поэтому вы можете настроить его напрямую.
zuul.senderrorfilter.post.disable = true
Пользовательская ошибка, я не скажу здесь много, просто опубликуйте код
Общедоступный класс errorfilter extends zuulfilter {private Static Final String error_status_code_key = "error.status_code"; private logger log = loggerfactory.getLogger (errorfilter.class); Public Static Final String default_err_msg = "Система занята, попробуйте еще раз позже"; @Override public String filterType () {return "post"; } @Override public int filterorder () {return 0; } @Override public boolean supfilter () {requestContext ctx = requestContext.getCurrentContext (); вернуть ctx.containskey (error_status_code_key); } @Override public Object run () {requestContext ctx = requestContext.getCurrentContext (); try {httpservletRequest request = ctx.getRequest (); int statusCode = (integer) ctx.get (error_status_code_key); String message = (string) ctx.get ("error.message"); if (ctx.containskey ("error.exception")) {throwable e = (exception) ctx.get ("error.exception"); Throwable re = getoriginexception (e); if (re exactionof java.net.connectexception) {message = "Real Service Connection отказано"; log.warn ("uri: {}, error: {}", request.getRequesturi (), re.getMessage ()); } else if (recementof java.net.sockettimeoutexception) {message = "real Service Timeout"; log.warn ("uri: {}, error: {}", request.getRequesturi (), re.getMessage ()); } else if (recementof com.netflix.client.clientexception) {message = re.getMessage (); log.warn ("uri: {}, error: {}", request.getRequesturi (), re.getMessage ()); } else {log.warn ("ошибка во время фильтрации", e); }} if (stringUtils.isblank (message)) message = default_err_msg; request.setattribute ("javax.servlet.error.status_code", StatusCode); request.setattribute ("javax.servlet.error.message", сообщение); Webutils.responseoutjson (ctx.getresponse (), jsonutils.tojson (new warpperresponse <> (Statuscode, Message))); } catch (Exception e) {string error = "ошибка во время фильтрации [errorfilter]"; log.error (ошибка, E); Webutils.responseoutjson (ctx.getresponse (), jsonutils.tojson (новый оберток <> (500, ошибка))); } return null; } private throwable getoriginexception (throwable e) {e = e.getCause (); while (e.getCause ()! = null) {e = e.getCause (); } return e; }}Наконец -то зарегистрируйте наш пользовательский файл ошибок
@Bean public errorfilter errorfilter () {return new errorfilter ();}Суммировать
Выше представлено метод реализации управления исключенным исключением Spring Zuul, введенный вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!