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

Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

 更新時(shí)間:2021年07月17日 09:19:44   作者:指尖涼  
這篇文章主要介紹了Spring Cloud Gateway Hystrix fallback獲取異常信息的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Gateway Hystrix fallback獲取異常信息

gateway fallback后,需要知道請(qǐng)求的是哪個(gè)接口以及具體的異常信息,根據(jù)不同的請(qǐng)求以及異常進(jìn)行不同的處理。一開始根據(jù)網(wǎng)上一篇博客上的做法:

pom.xml:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

application.yml:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false
          lowerCaseServiceId: true
      routes:
        - id: auth-server
          uri: lb://MS-OAUTH2-SERVER
          predicates:
            - Path=/**
      default-filters:
        - name: Hystrix
          args:
            name: fallbackcmd
            fallbackUri: forward:/fallback

然后fallback就是這樣:

@RestController
@Slf4j
public class FallbackController {

    @RequestMapping(value = "/fallback")
    @ResponseStatus
    public Mono<Map<String, Object>> fallback(ServerWebExchange exchange, Throwable throwable) {
        Map<String, Object> result = new HashMap<>(3);
        ServerHttpRequest request = exchange.getRequest();
        log.error("接口調(diào)用失敗,URL={}", request.getPath().pathWithinApplication().value(), throwable);
        result.put("code", 60002);
        result.put("data", null);
        result.put("msg", "接口調(diào)用失敗!");
        return Mono.just(result);
    }
}

但是測試發(fā)現(xiàn),這樣取出來的接口地址只是“/fallback”本身,并且沒有異常信息:

在這里插入圖片描述

后來我重新到HystrixGatewayFilterFactory類中去查看,發(fā)現(xiàn)了異常信息其實(shí)在exchange里:

在這里插入圖片描述

而請(qǐng)求的接口也通過debug找到了:

所以將代碼改成如下:

@RestController
@Slf4j
public class FallbackController {

    @RequestMapping(value = "/fallback")
    @ResponseStatus
    public Mono<Map<String, Object>> fallback(ServerWebExchange exchange) {
        Map<String, Object> result = new HashMap<>(3);
        result.put("code", 60002);
        result.put("data", null);
        Exception exception = exchange.getAttribute(ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR);
        ServerWebExchange delegate = ((ServerWebExchangeDecorator) exchange).getDelegate();
        log.error("接口調(diào)用失敗,URL={}", delegate.getRequest().getURI(), exception);
        if (exception instanceof HystrixTimeoutException) {
            result.put("msg", "接口調(diào)用超時(shí)");
        } else if (exception != null && exception.getMessage() != null) {
            result.put("msg", "接口調(diào)用失敗: " + exception.getMessage());
        } else {
            result.put("msg", "接口調(diào)用失敗");
        }
        return Mono.just(result);
    }
}

正常取到請(qǐng)求路徑以及異常信息:

關(guān)于 hystrix 的異常 fallback method wasn't found

消費(fèi)者服務(wù)--service 的實(shí)現(xiàn)如下:

@Service
public class BookService {
    @Autowired
    public RestTemplate  restTemplate;
    @HystrixCommand(fallbackMethod = "addServiceFallback")
    public  Book   getBook( Integer  bookId ){
        return  restTemplate.getForObject("http://provider-service/boot/book?bookId={bookId}",Book.class , bookId);
    }
    public  String  addServiceFallback(){
        System.out.println("error addServiceFallback.... ");
        return  "error" ;
    }
}

就會(huì)出現(xiàn)如下所述的異常

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri May 25 14:27:51 CST 2018
There was an unexpected error (type=Internal Server Error, status=500).
fallback method wasn't found: addServiceFallback([class java.lang.Integer])

這是因?yàn)橹付ǖ?備用方法 addServiceFallback 和 原方法getBook 的參數(shù)個(gè)數(shù),參數(shù)類型 不同造成的;

修改addServiceFallback 方法:

public  String addServiceFallback(Integer  bookId){
    System.out.println("error addServiceFallback.... ");
    return  "error" ;
}

繼續(xù)運(yùn)行,就會(huì)出現(xiàn)如下所述的異常

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri May 25 14:32:24 CST 2018
There was an unexpected error (type=Internal Server Error, status=500).
Incompatible return types. Command method: public com.bmcc.springboot.model.Book com.bmcc.springboot.service.BookService.getBook(java.lang.Integer); Fallback method: public java.lang.String com.bmcc.springboot.service.BookService.addServiceFallback(java.lang.Integer); Hint: Fallback method 'public java.lang.String com.bmcc.springboot.service.BookService.addServiceFallback(java.lang.Integer)' must return: class com.bmcc.springboot.model.Book or its subclass

這是因?yàn)橹付ǖ?備用方法 addServiceFallback 和 原方法getBook 雖然 參數(shù)個(gè)數(shù),參數(shù)類型 相同 ,但是 方法的返回值類型不同造成的;

修改addServiceFallback 方法:

public  Book  addServiceFallback(Integer  bookId){
    System.out.println("error addServiceFallback.... ");
    return  new Book() ;
}

繼續(xù)運(yùn)行,這樣就可以看到當(dāng)一個(gè)服務(wù)提供者異常關(guān)閉時(shí), 消費(fèi)者(消費(fèi)者采用輪詢的方式消費(fèi)服務(wù))再繼續(xù)訪問服務(wù)時(shí),不會(huì)拋出異常頁面,而是如下:

{"bookId":0,"bookName":null,"price":null,"publisher":null}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot開發(fā)flowable定時(shí)任務(wù)問題

    springboot開發(fā)flowable定時(shí)任務(wù)問題

    這篇文章主要介紹了springboot開發(fā)flowable定時(shí)任務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 解讀RedisTemplate的各種操作(set、hash、list、string)

    解讀RedisTemplate的各種操作(set、hash、list、string)

    這篇文章主要介紹了解讀RedisTemplate的各種操作(set、hash、list、string),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解如何開發(fā)一個(gè)MyBatis通用Mapper的輪子

    詳解如何開發(fā)一個(gè)MyBatis通用Mapper的輪子

    因?yàn)橐恍┰?,例如:通用?shù)據(jù)權(quán)限控制、MyBatis-Plus好像不支持聯(lián)合主鍵等,我們不得不開發(fā)一個(gè)MyBatis通用Mapper的輪子。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-12-12
  • Java簡單工廠模式定義與用法實(shí)例分析

    Java簡單工廠模式定義與用法實(shí)例分析

    這篇文章主要介紹了Java簡單工廠模式定義與用法,結(jié)合實(shí)例形式分析了java簡單工廠模式的相關(guān)定義與使用技巧,并給出了原理類圖進(jìn)行總結(jié),需要的朋友可以參考下
    2019-07-07
  • 解決lombok的@Data注解無法打印繼承的父類信息問題

    解決lombok的@Data注解無法打印繼承的父類信息問題

    在Java編程中,使用@Data注解可能導(dǎo)致子類繼承父類屬性后,打印只顯示子類信息不顯示父類信息,問題源于@Data注解作用域僅限于當(dāng)前類,解決方法包括使用@ToString(callSuper=true)注解或重寫toString方法
    2024-11-11
  • Java中的多種文件上傳方式總結(jié)

    Java中的多種文件上傳方式總結(jié)

    這篇文章主要介紹了Java中的多種文件上傳方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 項(xiàng)目打包成jar后包無法讀取src/main/resources下文件的解決

    項(xiàng)目打包成jar后包無法讀取src/main/resources下文件的解決

    本文主要介紹了項(xiàng)目打包成jar后包無法讀取src/main/resources下文件的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 關(guān)于Spring中Bean的創(chuàng)建進(jìn)行更多方面的控制

    關(guān)于Spring中Bean的創(chuàng)建進(jìn)行更多方面的控制

    今天小編就為大家分享一篇關(guān)于關(guān)于Spring中Bean的創(chuàng)建進(jìn)行更多方面的控制,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏

    Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏

    這篇文章主要介紹了Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Mac?Maven環(huán)境搭建安裝和配置超詳細(xì)步驟

    Mac?Maven環(huán)境搭建安裝和配置超詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Mac?Maven環(huán)境搭建安裝和配置的超詳細(xì)步驟,Maven是一種常用的Java構(gòu)建工具,它可以自動(dòng)化構(gòu)建、測試和打包Java項(xiàng)目,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10

最新評(píng)論

石泉县| 四川省| 邻水| 吉隆县| 德惠市| 体育| 昆明市| 华安县| 尼勒克县| 桑日县| 绥宁县| 固安县| 周口市| 东海县| 平昌县| 保定市| 新郑市| 华坪县| 武平县| 叶城县| 繁峙县| 郓城县| 美姑县| 延边| 秀山| 平顺县| 泰顺县| 都昌县| 商城县| 汝阳县| 怀宁县| 韶山市| 墨竹工卡县| 米泉市| 沙湾县| 德昌县| 洛阳市| 明光市| 大同县| 会同县| 麻城市|