最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cloud zuul自定義統(tǒng)一異常處理實(shí)現(xiàn)方法

 更新時(shí)間:2018年02月02日 16:46:45   投稿:mrr  
這篇文章主要介紹了Spring Cloud zuul自定義統(tǒng)一異常處理實(shí)現(xiàn),需要的朋友可以參考下

Zuul在springcloud微服務(wù)體系中提供filer和router功能,是微服務(wù)不可或缺的部分。filer處理默認(rèn)實(shí)現(xiàn)的外還可以自定義進(jìn)行授權(quán)、限流、安全校驗(yàn)等,router完全可以替代Nginx反向代理。Zuul異常處理就是由SendErrorFilter完成。

在我們應(yīng)用過程我們發(fā)現(xiàn)使用默認(rèn)的異常filter有兩個(gè)問題不是很友好:

1.無法快速識(shí)別出是否是請(qǐng)求路由的服務(wù)超時(shí)還是沒有任何可用節(jié)點(diǎn),發(fā)生錯(cuò)誤只能查看日志通過堆棧去定位;

2.無法兼容自定義的譬如{code:500,msg:”xx error”}格式的響應(yīng)包格式。

接下來我們討論的是如何自定義異常處理、自定義異常提示信息等。

首先,我們必須禁用默認(rèn)的SendErrorFilter,官方已經(jīng)提供了開關(guān)配置,直接配置即可

zuul.SendErrorFilter.post.disable=true

自定義ErrorFilter,這里就不多說,直接貼代碼

public class 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 = "系統(tǒng)繁忙,請(qǐng)稍后再試";
  @Override
  public String filterType() {
    return "post";
  }
  @Override
  public int filterOrder() {
    return 0;
  }
  @Override
  public boolean shouldFilter() {
    RequestContext ctx = RequestContext.getCurrentContext();
    return 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 instanceof java.net.ConnectException){
          message = "Real Service Connection refused";
          log.warn("uri:{},error:{}" ,request.getRequestURI(),re.getMessage());
        }else if(re instanceof java.net.SocketTimeoutException){
          message = "Real Service Timeout";
          log.warn("uri:{},error:{}" ,request.getRequestURI(),re.getMessage());
        }else if(re instanceof com.netflix.client.ClientException){
          message = re.getMessage();
          log.warn("uri:{},error:{}" ,request.getRequestURI(),re.getMessage());
        }else{
          log.warn("Error during filtering",e);
        }
      }
      if(StringUtils.isBlank(message))message = DEFAULT_ERR_MSG;
      request.setAttribute("javax.servlet.error.status_code", statusCode);
      request.setAttribute("javax.servlet.error.message", message);
      WebUtils.responseOutJson(ctx.getResponse(), JsonUtils.toJson(new WrapperResponse<>(statusCode, message)));
    } catch (Exception e) {
      String error = "Error during filtering[ErrorFilter]";
      log.error(error,e);
      WebUtils.responseOutJson(ctx.getResponse(), JsonUtils.toJson(new WrapperResponse<>(500, error)));
    }
    return null;
  }
  private Throwable getOriginException(Throwable e){
    e = e.getCause();
    while(e.getCause() != null){
      e = e.getCause();
    }
    return e;
  }
}

最后注冊(cè)我們自定義的ErrorFilter

@Bean 
public ErrorFilter errorFilter(){
  return new ErrorFilter();
}

總結(jié)

以上所述是小編給大家介紹的Spring Cloud zuul自定義統(tǒng)一異常處理實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java連接sftp服務(wù)器實(shí)現(xiàn)上傳下載功能

    Java連接sftp服務(wù)器實(shí)現(xiàn)上傳下載功能

    這篇文章主要介紹了java連接sftp服務(wù)器實(shí)現(xiàn)上傳下載,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)赫夫曼樹(哈夫曼樹)的創(chuàng)建

    Java實(shí)現(xiàn)赫夫曼樹(哈夫曼樹)的創(chuàng)建

    給定N個(gè)權(quán)值作為N個(gè)葉子結(jié)點(diǎn),構(gòu)造一棵二叉樹,若該樹的帶權(quán)路徑長度(WPL)達(dá)到最小,稱這樣的二叉樹為最優(yōu)二叉樹,也稱為哈夫曼樹(Huffman Tree)。這篇文章主要就是為大家介紹如何通過Java實(shí)現(xiàn)赫夫曼樹,需要的朋友可以參考一下
    2021-12-12
  • 啟動(dòng)SpringBoot報(bào)錯(cuò)Input length = 1問題及解決

    啟動(dòng)SpringBoot報(bào)錯(cuò)Input length = 1問題及解決

    這篇文章主要介紹了啟動(dòng)SpringBoot報(bào)錯(cuò)Input length = 1問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot中使用@Value注解注入詳解

    SpringBoot中使用@Value注解注入詳解

    這篇文章主要介紹了SpringBoot中的@Value注入詳解,在SpringBoot中,@Value注解可以注入一些字段的普通屬性,并且會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,本文對(duì)這些類型進(jìn)行總結(jié),需要的朋友可以參考下
    2023-08-08
  • Spring Cloud之服務(wù)監(jiān)控turbine的示例

    Spring Cloud之服務(wù)監(jiān)控turbine的示例

    這篇文章主要介紹了Spring Cloud之服務(wù)監(jiān)控turbine的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊詳解

    Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot接口設(shè)計(jì)防篡改、防重放攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Mybatis-Plus中updateById方法不能更新空值問題解決

    Mybatis-Plus中updateById方法不能更新空值問題解決

    本文主要介紹了Mybatis-Plus中updateById方法不能更新空值問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SpringCloudGateway?Nacos?GitlabRunner全自動(dòng)灰度服務(wù)搭建發(fā)布

    SpringCloudGateway?Nacos?GitlabRunner全自動(dòng)灰度服務(wù)搭建發(fā)布

    這篇文章主要為大家介紹了SpringCloudGateway?Nacos?GitlabRunner全自動(dòng)灰度服務(wù)搭建和發(fā)布實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 如何解決Maven打包時(shí)每次都出現(xiàn)Download maven-metadata.xml卡住問題

    如何解決Maven打包時(shí)每次都出現(xiàn)Download maven-metadata.xml卡住問題

    這篇文章主要介紹了如何解決Maven打包時(shí)每次都出現(xiàn)Download maven-metadata.xml卡住問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 一文探索Java文件讀寫更高效方式

    一文探索Java文件讀寫更高效方式

    這篇文章主要介紹了一文探索Java文件讀寫更高效方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-07-07

最新評(píng)論

通化市| 越西县| 门源| 桐梓县| 绍兴县| 林芝县| 花垣县| 互助| 平塘县| 建湖县| 云霄县| 清远市| 绵竹市| 武定县| 饶阳县| 鲜城| 蚌埠市| 望城县| 老河口市| 土默特左旗| 镇宁| 黄石市| 丹东市| 郸城县| 揭东县| 托克逊县| 新田县| 东平县| 汝城县| 梧州市| 双鸭山市| 广水市| 青阳县| 灵川县| 和政县| 甘孜| 淅川县| 江津市| 深州市| 嘉义县| 苏尼特右旗|