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

詳解springcloud 基于feign的服務(wù)接口的統(tǒng)一hystrix降級(jí)處理

 更新時(shí)間:2019年06月03日 14:38:28   作者:penggle  
這篇文章主要介紹了詳解springcloud 基于feign的服務(wù)接口的統(tǒng)一hystrix降級(jí)處理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

springcloud開(kāi)發(fā)微服務(wù)時(shí),基于feign來(lái)做聲明式服務(wù)接口,當(dāng)啟用hystrix服務(wù)熔斷降級(jí)時(shí),項(xiàng)目服務(wù)眾多,每個(gè)Feign服務(wù)接口都得寫一些重復(fù)問(wèn)的服務(wù)降級(jí)處理代碼,勢(shì)必顯得枯燥無(wú)味:

Feign服務(wù)接口:

@FeignClient(name="springcloud-nacos-producer", qualifier="productApiService", contextId="productApiService", fallback=ProductFallbackApiService.class)
public interface ProductApiService {

 /**
  * 創(chuàng)建商品
  * @param product
  */
 @PostMapping(value="/api/product/add", produces=APPLICATION_JSON, consumes=APPLICATION_JSON)
 public Result<Long> createProduct(@RequestBody Product product);
 
 /**
  * 修改商品
  * @param product
  */
 @PutMapping(value="/api/product/update", produces=APPLICATION_JSON, consumes=APPLICATION_JSON)
 public Result<Object> updateProduct(@RequestBody Product product);
 
 /**
  * 刪除商品
  * @param productId
  */
 @DeleteMapping(value="/api/product/delete/{productId}", produces=APPLICATION_JSON)
 public Result<Object> deleteProductById(@PathVariable("productId") Long productId);
 
 /**
  * 根據(jù)productId獲取商品信息
  * @param productId
  * @return
  */
 @GetMapping(value="/api/product/{productId}", produces=APPLICATION_JSON)
 public Result<Product> getProductById(@PathVariable("productId") Long productId);
 
 /**
  * 根據(jù)條件查詢商品列表(分頁(yè)、排序)
  * @param condition
  * @param page
  * @param sort
  * @return
  */
 @GetMapping(value="/api/product/list1", produces=APPLICATION_JSON)
 public PageResult<List<Product>> getProductListByPage(@RequestParam Product condition, @RequestParam Page page, @RequestParam Sort sort);
}

對(duì)應(yīng)的熔斷降級(jí)處理類:

@Component
public class ProductFallbackApiService implements ProductApiService {

 private static final HttpStatus SERVICE_UNAVAILABLE = HttpStatus.SERVICE_UNAVAILABLE;
 
 protected <T> Result<T> defaultFallbackResult() {
  return Result.failure().code(String.valueOf(SERVICE_UNAVAILABLE.value())).message(String.format("請(qǐng)求失?。?s, %s", SERVICE_UNAVAILABLE.value(), SERVICE_UNAVAILABLE.getReasonPhrase())).build();
 }
 
 protected <T> PageResult<T> defaultFallbackPageResult() {
  return PageResult.failure().code(String.valueOf(SERVICE_UNAVAILABLE.value())).message(String.format("請(qǐng)求失?。?s, %s", SERVICE_UNAVAILABLE.value(), SERVICE_UNAVAILABLE.getReasonPhrase())).build();
 }
 
 @Override
 public Result<Long> createProduct(Product product) {
  return defaultFallbackResult();
 }

 @Override
 public Result<Object> updateProduct(Product product) {
  return defaultFallbackResult();
 }

 @Override
 public Result<Object> deleteProductById(Long productId) {
  return defaultFallbackResult();
 }

 @Override
 public Result<Product> getProductById(Long productId) {
  return defaultFallbackResult();
 }

 @Override
 public PageResult<List<Product>> getProductListByPage(Product condition, Page page, Sort sort) {
  return defaultFallbackPageResult();
 }

}

當(dāng)服務(wù)較多時(shí)寫這樣重復(fù)的統(tǒng)一熔斷降級(jí)處理顯得十分枯燥無(wú)味!

前提場(chǎng)景是你的服務(wù)接口具有統(tǒng)一的報(bào)文格式,例如我的是Result<T>或者PageResult<T>,這樣才有統(tǒng)一全局處理的可能,否則每個(gè)服務(wù)的fallback你是省不了的

本文將采用Cglib動(dòng)態(tài)代理來(lái)統(tǒng)一處理這些fallback,說(shuō)來(lái)容易做起來(lái)卻十分棘手,完成這一功能,費(fèi)了相當(dāng)大的力氣:

代碼說(shuō)明:

1、包org.springframework.cloud.openfeign中的都是為實(shí)現(xiàn)這一功能自定義的東西,至于包名為什么取org.springframework.cloud.openfeign,那是因?yàn)閛rg.springframework.cloud.openfeign.Targeter這個(gè)接口聲明是protected的

2、上面4個(gè)類:DefaultFeignClientsConfiguration.java、DefaultHystrixFallbackHandler.java、DefaultHystrixFallbackHandlerFactory.java、HystrixFallbackResults.java是在項(xiàng)目中具體使用的具體配置

代碼位置:
1、https://github.com/penggle/xmodule/tree/master/xmodule-common-springcloud
2、https://github.com/penggle/xmodule/tree/master/xmodule-examples-springcloud/xmodule-examples-springcloud-nacos

快速上手入口:https://github.com/penggle/xmodule/blob/master/xmodule-common-springcloud/src/main/java/org/springframework/cloud/openfeign/HystrixFallbackConfiguration.java

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybaties?plus?selectMaps和selectList的區(qū)別說(shuō)明

    mybaties?plus?selectMaps和selectList的區(qū)別說(shuō)明

    這篇文章主要介紹了mybaties?plus?selectMaps和selectList的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis中注入執(zhí)行sql查詢、更新、新增及建表語(yǔ)句案例代碼

    Mybatis中注入執(zhí)行sql查詢、更新、新增及建表語(yǔ)句案例代碼

    這篇文章主要介紹了Mybatis中注入執(zhí)行sql查詢、更新、新增以及建表語(yǔ)句,主要說(shuō)明一個(gè)另類的操作,注入sql,并使用mybatis執(zhí)行,結(jié)合案例代碼詳解講解,需要的朋友可以參考下
    2023-02-02
  • Java設(shè)置JSON字符串參數(shù)編碼的示例詳解

    Java設(shè)置JSON字符串參數(shù)編碼的示例詳解

    在Java中創(chuàng)建JSON字符串,我們可以使用多個(gè)庫(kù),其中最流行的是Jackson、Gson和org.json,,下面給大家分享Java設(shè)置JSON字符串參數(shù)編碼的示例,感興趣的朋友一起看看吧
    2024-06-06
  • java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車剖析

    java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車剖析

    這篇文章主要為大家介紹了java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車的示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Springboot啟動(dòng)停止命令的.sh腳本編寫方式

    Springboot啟動(dòng)停止命令的.sh腳本編寫方式

    這篇文章主要介紹了Springboot啟動(dòng)停止命令的.sh腳本編寫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn)

    SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn),文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • Java多線程(單例模式,阻塞隊(duì)列,定時(shí)器,線程池)詳解

    Java多線程(單例模式,阻塞隊(duì)列,定時(shí)器,線程池)詳解

    本文是多線程初級(jí)入門,主要介紹了多線程單例模式、阻塞隊(duì)列、定時(shí)器、線程池、多線程面試考點(diǎn),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • Spring Boot中使用Server-Sent Events (SSE) 實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送教程

    Spring Boot中使用Server-Sent Events (SSE) 實(shí)

    Server-Sent Events (SSE) 是HTML5引入的一種輕量級(jí)的服務(wù)器向?yàn)g覽器客戶端單向推送實(shí)時(shí)數(shù)據(jù)的技術(shù),本文主要介紹了Spring Boot中使用Server-Sent Events (SSE) 實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送教程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • java反射之Method的invoke方法實(shí)現(xiàn)教程詳解

    java反射之Method的invoke方法實(shí)現(xiàn)教程詳解

    這篇文章主要給大家介紹了關(guān)于java反射之Method的invoke方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • JVM虛擬機(jī)的執(zhí)行流程解析

    JVM虛擬機(jī)的執(zhí)行流程解析

    這篇文章主要介紹了JVM虛擬機(jī)的執(zhí)行流程圖解,Java虛擬機(jī)的啟動(dòng)是通過(guò)引導(dǎo)類加載器創(chuàng)建一個(gè)初始類來(lái)完成的,這個(gè)類是由虛擬機(jī)的具體實(shí)現(xiàn)指定的,程序開(kāi)始執(zhí)行時(shí)他才運(yùn)行,程序結(jié)束時(shí)他就停止,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

龙山县| 鄢陵县| 康乐县| 庐江县| 岢岚县| 龙门县| 兴隆县| 皮山县| 宁都县| 博湖县| 赤峰市| 泰和县| 文成县| 孟州市| 桂东县| 汉阴县| 申扎县| 开化县| 曲靖市| 长治县| 衡阳县| 巫溪县| 瑞金市| 明溪县| 台山市| 沅江市| 漳州市| 海南省| 东阳市| 静海县| 若尔盖县| 昭觉县| 左贡县| 五寨县| 囊谦县| 米林县| 咸丰县| 承德县| 江北区| 通许县| 江城|