zuul转发的一些常见异常
为什么80%的码农都做不了架构师?>>>
##序 使用zuul作为api网关的话,经常会碰见一些异常,这里小结一下。
##ZuulException 这个是最外层的异常
public class ZuulException extends Exception {public int nStatusCode;public String errorCause;/*** Source Throwable, message, status code and info about the cause* @param throwable* @param sMessage* @param nStatusCode* @param errorCause*/public ZuulException(Throwable throwable, String sMessage, int nStatusCode, String errorCause) {super(sMessage, throwable);this.nStatusCode = nStatusCode;this.errorCause = errorCause;incrementCounter("ZUUL::EXCEPTION:" + errorCause + ":" + nStatusCode);}/*** error message, status code and info about the cause* @param sMessage* @param nStatusCode* @param errorCause*/public ZuulException(String sMessage, int nStatusCode, String errorCause) {super(sMessage);this.nStatusCode = nStatusCode;this.errorCause = errorCause;incrementCounter("ZUUL::EXCEPTION:" + errorCause + ":" + nStatusCode);}/*** Source Throwable, status code and info about the cause* @param throwable* @param nStatusCode* @param errorCause*/public ZuulException(Throwable throwable, int nStatusCode, String errorCause) {super(throwable.getMessage(), throwable);this.nStatusCode = nStatusCode;this.errorCause = errorCause;incrementCounter("ZUUL::EXCEPTION:" + errorCause + ":" + nStatusCode);}private static final void incrementCounter(String name) {CounterFactory.instance().increment(name);}}
##RibbonRoutingFilter spring-cloud-netflix-core-1.2.6.RELEASE-sources.jar!/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java 这个类抛了很多ZuulException:
@Overridepublic Object run() {RequestContext context = RequestContext.getCurrentContext();this.helper.addIgnoredHeaders();try {RibbonCommandContext commandContext = buildCommandContext(context);ClientHttpResponse response = forward(commandContext);setResponse(response);return response;}catch (ZuulException ex) {context.set(ERROR_STATUS_CODE, ex.nStatusCode);context.set("error.message", ex.errorCause);context.set("error.exception", ex);}catch (Exception ex) {context.set("error.status_code",HttpServletResponse.SC_INTERNAL_SERVER_ERROR);context.set("error.exception", ex);}return null;}
###forward
protected ClientHttpResponse forward(RibbonCommandContext context) throws Exception {Map<String, Object> info = this.helper.debug(context.getMethod(),context.getUri(), context.getHeaders(), context.getParams(),context.getRequestEntity());RibbonCommand command = this.ribbonCommandFactory.create(context);try {ClientHttpResponse response = command.execute();this.helper.appendDebug(info, response.getStatusCode().value(),response.getHeaders());return response;}catch (HystrixRuntimeException ex) {return handleException(info, ex);}}
这里有一个HystrixRuntimeException,主要是跟hystrix相关的,比如超时等。 ###handleException
protected ClientHttpResponse handleException(Map<String, Object> info,HystrixRuntimeException ex) throws ZuulException {int statusCode = HttpStatus.INTERNAL_SERVER_ERROR.value();Throwable cause = ex;String message = ex.getFailureType().toString();ClientException clientException = findClientException(ex);if (clientException == null) {clientException = findClientException(ex.getFallbackException());}if (clientException != null) {if (clientException.getErrorType() == ClientException.ErrorType.SERVER_THROTTLED) {statusCode = HttpStatus.SERVICE_UNAVAILABLE.value();}cause = clientException;message = clientException.getErrorType().toString();}info.put("status", String.valueOf(statusCode));throw new ZuulException(cause, "Forwarding error", statusCode, message);}
###findClientException
protected ClientException findClientException(Throwable t) {if (t == null) {return null;}if (t instanceof ClientException) {return (ClientException) t;}return findClientException(t.getCause());}
com.netflix.client.ClientException
public class ClientException extends Exception{/*** */private static final long serialVersionUID = -7697654244064441234L;/*** define your error codes here* */public enum ErrorType{GENERAL, CONFIGURATION, NUMBEROF_RETRIES_EXEEDED, NUMBEROF_RETRIES_NEXTSERVER_EXCEEDED, SOCKET_TIMEOUT_EXCEPTION, READ_TIMEOUT_EXCEPTION,UNKNOWN_HOST_EXCEPTION,CONNECT_EXCEPTION,CLIENT_THROTTLED,SERVER_THROTTLED,NO_ROUTE_TO_HOST_EXCEPTION,CACHE_MISSING;static String getName(int errorCode){if (ErrorType.values().length >= errorCode){return ErrorType.values()[errorCode].name();}else{return "UNKNOWN ERROR CODE";}}}
//...
}
想获取最新资讯,请关注微信公众号
转载于:https://my.oschina.net/go4it/blog/994069
zuul转发的一些常见异常相关推荐
- Flink常见异常和错误信息小结
大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! Flink的常见异常众多,不可能面面俱到,所以想到哪儿写到哪儿,有漏掉的之后再补充. 部署和资源问题 ...
- Android 常见异常及解决办法
Ø 前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1. java.lang.NullPointerException: Attempt to i ...
- 初学Python常见异常错误,总有一处你会遇到!
初学Python常见异常错误,总有一处你会遇到! 参考文章: (1)初学Python常见异常错误,总有一处你会遇到! (2)https://www.cnblogs.com/xxpythonxx/p/1 ...
- Cloudera Manager 常见异常
Cloudera Manager 常见异常 参考文章: (1)Cloudera Manager 常见异常 (2)https://www.cnblogs.com/lemonu/p/10332962.ht ...
- Redis集群配置和常见异常解决
Redis集群配置和常见异常解决 参考文章: (1)Redis集群配置和常见异常解决 (2)https://www.cnblogs.com/hzb462606/p/11121281.html 备忘一下 ...
- Java 常见异常种类
Java 常见异常种类 参考文章: (1)Java 常见异常种类 (2)https://www.cnblogs.com/cvst/p/5822373.html 备忘一下.
- Crash常见异常总结
平时经常要分析一些Crash问题,将常见的Crash异常总结如下: Crash常见异常 Crash原因 java.lang.NullPointerException 空指针异常 java.lang.A ...
- Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常
Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...
- orcal 数据库 maven架构 ssh框架 的全xml环境模版 及常见异常解决
创建maven项目后,毫不犹豫,超简单傻瓜式搞定dependencies(pom.xml 就是maven的依赖管理),这样你就有了所有你要的包 <project xmlns="http ...
最新文章
- Juniper SSH防护
- python保存内容到文件(text、json、csv)
- 5W 字的 Linux 知识总结
- Spring Boot 使用slf4j+logback记录日志配置
- U盘装win7系统出现question(1808)的原因与解决方法
- 云米冰箱能控制扫地机器人_既能解放劳动力又能提升家庭幸福指数的小家电,云米互联网扫地机Pro开箱!...
- Exchange2003-2010迁移系列之十一,Exchange2010 OWA配置
- 再见 Python!Yann LeCun 警告:深度学习需要新编程语言
- 保险公司在线签名 html5,html5手写签名
- 百度网盘kbengine - warring项目下载地址
- rsync+inotify实现数据实时同步备份
- WOE编码和IV信息量
- 坚果pro2刷回官方_锤子坚果Pro2手机降回6.0.3版本教程
- java打印指定宽度_如何设置图片打印尺寸,长与宽指定大小(CM)?
- 旧电脑更新win10日记
- GT21L16S2Y点阵数据的读取显示
- Visitor(访问者模式)
- big5转utf-8乱码解决方案
- VUE created与mounted区别
- 我协会负责人调研东风汽车·····