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

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

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

springcloud開發(fā)微服務時,基于feign來做聲明式服務接口,當啟用hystrix服務熔斷降級時,項目服務眾多,每個Feign服務接口都得寫一些重復問的服務降級處理代碼,勢必顯得枯燥無味:

Feign服務接口:

@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ù)條件查詢商品列表(分頁、排序)
  * @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);
}

對應的熔斷降級處理類:

@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("請求失?。?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("請求失敗:%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();
 }

}

當服務較多時寫這樣重復的統(tǒng)一熔斷降級處理顯得十分枯燥無味!

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

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

代碼說明:

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

2、上面4個類:DefaultFeignClientsConfiguration.java、DefaultHystrixFallbackHandler.java、DefaultHystrixFallbackHandlerFactory.java、HystrixFallbackResults.java是在項目中具體使用的具體配置

代碼位置:
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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

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

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

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

    在Java中創(chuàng)建JSON字符串,我們可以使用多個庫,其中最流行的是Jackson、Gson和org.json,,下面給大家分享Java設置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)境翻車的示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Springboot啟動停止命令的.sh腳本編寫方式

    Springboot啟動停止命令的.sh腳本編寫方式

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

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

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

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

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

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

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

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

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

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

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

最新評論

习水县| 宿松县| 班戈县| 策勒县| 牡丹江市| 定结县| 迭部县| 天津市| 大姚县| 布尔津县| 扬州市| 陆丰市| 内丘县| 稷山县| 绵竹市| 巴彦县| 自贡市| 黄陵县| 京山县| 富川| 南江县| 哈尔滨市| 广昌县| 永登县| 宿松县| 仙居县| 济源市| 北流市| 府谷县| 太原市| 甘南县| 宝丰县| 临安市| 汶上县| 澳门| 桐城市| 即墨市| 剑河县| 无为县| 湟源县| 凉山|