国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

springcloud 基于feign的服務接口的統一hystrix降級處理

hersion / 1710人閱讀

摘要:開發微服務時,基于來做聲明式服務接口,當啟用服務熔斷降級時,項目服務眾多,每個服務接口都得寫一些重復問的服務降級處理代碼,勢必顯得枯燥無味服務接口創建商品修改商品刪除商品根據獲取商品信息根據條件查詢商品列表分頁排序對應的熔斷降級處理類請

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

Feign服務接口:

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

    /**
     * 創建商品
     * @param product
     */
    @PostMapping(value="/api/product/add", produces=APPLICATION_JSON, consumes=APPLICATION_JSON)
    public Result createProduct(@RequestBody Product product);
    
    /**
     * 修改商品
     * @param product
     */
    @PutMapping(value="/api/product/update", produces=APPLICATION_JSON, consumes=APPLICATION_JSON)
    public Result updateProduct(@RequestBody Product product);
    
    /**
     * 刪除商品
     * @param productId
     */
    @DeleteMapping(value="/api/product/delete/{productId}", produces=APPLICATION_JSON)
    public Result deleteProductById(@PathVariable("productId") Long productId);
    
    /**
     * 根據productId獲取商品信息
     * @param productId
     * @return
     */
    @GetMapping(value="/api/product/{productId}", produces=APPLICATION_JSON)
    public Result getProductById(@PathVariable("productId") Long productId);
    
    /**
     * 根據條件查詢商品列表(分頁、排序)
     * @param condition
     * @param page
     * @param sort
     * @return
     */
    @GetMapping(value="/api/product/list1", produces=APPLICATION_JSON)
    public PageResult> 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  Result defaultFallbackResult() {
        return Result.failure().code(String.valueOf(SERVICE_UNAVAILABLE.value())).message(String.format("請求失敗:%s, %s", SERVICE_UNAVAILABLE.value(), SERVICE_UNAVAILABLE.getReasonPhrase())).build();
    }
    
    protected  PageResult 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 createProduct(Product product) {
        return defaultFallbackResult();
    }

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

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

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

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

}

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

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

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

代碼說明:
1、包org.springframework.cloud.openfeign中的都是為實現這一功能自定義的東西,至于包名為什么取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/xm...
2、https://github.com/penggle/xm...

快速上手入口:
https://github.com/penggle/xm...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74789.html

相關文章

  • springcloud-feign實現服務發現

    摘要:本文重點介紹一下基于實現服務發現。使用方式下面我們開始的使用添加和的依賴添加注解開啟服務發現,注解支持客戶端。同樣子,他可以使用默認的也可以使用或者修改配置文件服務名字服務無端口會隨機選擇一個服務集群名字注冊中心地址,完成。 springcloud-feign實現服務發現 上一篇介紹了nacos實現配置和注冊中心,在微服務中只有配置和注冊中心遠遠不夠,還需要有服務發現。本文重點介紹一...

    _DangJin 評論0 收藏0
  • springCloud學習3(Netflix Hystrix彈性客戶端)

    摘要:在艙壁模式中可以隔離每個遠程資源,并分配各自的線程池,使之互不影響。 springcloud 總集:https://www.tapme.top/blog/detail/2019-02-28-11-33 本次用到全部代碼見文章最下方。 一、為什么要有客戶端彈性模式 ??所有的系統都會遇到故障,分布式系統單點故障概率更高。如何構建應用程序來應對故障,是每個軟件開發人員工作的關鍵部分。但是通...

    yagami 評論0 收藏0
  • 外行人都能看懂SpringCloud,錯過了血虧!

    摘要:集群系統中的單個計算機通常稱為節點,通常通過局域網連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負責了。于是,小周和就變成了協作開發。都是為了項目正常運行以及迭代。 一、前言 只有光頭才能變強 認識我的朋友可能都知道我這陣子去實習啦,去的公司說是用SpringCloud(但我覺得使用的力度并不大啊~~)... 所以,這篇主要來講講SpringClou...

    沈建明 評論0 收藏0
  • 外行人都能看懂SpringCloud,錯過了血虧!

    摘要:集群系統中的單個計算機通常稱為節點,通常通過局域網連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負責了。于是,小周和就變成了協作開發。都是為了項目正常運行以及迭代。 一、前言 只有光頭才能變強 認識我的朋友可能都知道我這陣子去實習啦,去的公司說是用SpringCloud(但我覺得使用的力度并不大啊~~)... 所以,這篇主要來講講SpringClou...

    enda 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<