为什么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转发的一些常见异常相关推荐

  1. Flink常见异常和错误信息小结

    大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! Flink的常见异常众多,不可能面面俱到,所以想到哪儿写到哪儿,有漏掉的之后再补充. 部署和资源问题 ...

  2. Android 常见异常及解决办法

    Ø  前言 本文主要记录 Android 的常见异常及解决办法,以备以后遇到相同问题时可以快速解决. 1.   java.lang.NullPointerException: Attempt to i ...

  3. 初学Python常见异常错误,总有一处你会遇到!

    初学Python常见异常错误,总有一处你会遇到! 参考文章: (1)初学Python常见异常错误,总有一处你会遇到! (2)https://www.cnblogs.com/xxpythonxx/p/1 ...

  4. Cloudera Manager 常见异常

    Cloudera Manager 常见异常 参考文章: (1)Cloudera Manager 常见异常 (2)https://www.cnblogs.com/lemonu/p/10332962.ht ...

  5. Redis集群配置和常见异常解决

    Redis集群配置和常见异常解决 参考文章: (1)Redis集群配置和常见异常解决 (2)https://www.cnblogs.com/hzb462606/p/11121281.html 备忘一下 ...

  6. Java 常见异常种类

    Java 常见异常种类 参考文章: (1)Java 常见异常种类 (2)https://www.cnblogs.com/cvst/p/5822373.html 备忘一下.

  7. Crash常见异常总结

    平时经常要分析一些Crash问题,将常见的Crash异常总结如下: Crash常见异常 Crash原因 java.lang.NullPointerException 空指针异常 java.lang.A ...

  8. Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常

    Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...

  9. orcal 数据库 maven架构 ssh框架 的全xml环境模版 及常见异常解决

    创建maven项目后,毫不犹豫,超简单傻瓜式搞定dependencies(pom.xml 就是maven的依赖管理),这样你就有了所有你要的包 <project xmlns="http ...

最新文章

  1. Juniper SSH防护
  2. python保存内容到文件(text、json、csv)
  3. 5W 字的 Linux 知识总结
  4. Spring Boot 使用slf4j+logback记录日志配置
  5. U盘装win7系统出现question(1808)的原因与解决方法
  6. 云米冰箱能控制扫地机器人_既能解放劳动力又能提升家庭幸福指数的小家电,云米互联网扫地机Pro开箱!...
  7. Exchange2003-2010迁移系列之十一,Exchange2010 OWA配置
  8. 再见 Python!Yann LeCun 警告:深度学习需要新编程语言
  9. 保险公司在线签名 html5,html5手写签名
  10. 百度网盘kbengine - warring项目下载地址
  11. rsync+inotify实现数据实时同步备份
  12. WOE编码和IV信息量
  13. 坚果pro2刷回官方_锤子坚果Pro2手机降回6.0.3版本教程
  14. java打印指定宽度_如何设置图片打印尺寸,长与宽指定大小(CM)?
  15. 旧电脑更新win10日记
  16. GT21L16S2Y点阵数据的读取显示
  17. Visitor(访问者模式)
  18. big5转utf-8乱码解决方案
  19. VUE created与mounted区别
  20. 我协会负责人调研东风汽车·····

热门文章

  1. TypeScript 终极初学者指南
  2. yum搭建本地仓库、国内源、下载rpm包、源码安装
  3. [摘]全文检索引擎Solr系列—–全文检索基本原理
  4. fgetcsv()函数
  5. 运维自动化之基于python语言的文字界面的运维管理软件
  6. FFLIb Demo CQRS
  7. openfire 插件开发例子
  8. c++ explicit关键字_聊一聊 C++的特性 explicit 匿名空间
  9. html调用接口_搜狗ocr识别接口
  10. 第三篇.python编辑器和集成环境01