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

資訊專欄INFORMATION COLUMN

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

hersion / 1697人閱讀

摘要:開發(fā)微服務(wù)時(shí),基于來(lái)做聲明式服務(wù)接口,當(dāng)啟用服務(wù)熔斷降級(jí)時(shí),項(xiàng)目服務(wù)眾多,每個(gè)服務(wù)接口都得寫一些重復(fù)問(wèn)的服務(wù)降級(jí)處理代碼,勢(shì)必顯得枯燥無(wú)味服務(wù)接口創(chuàng)建商品修改商品刪除商品根據(jù)獲取商品信息根據(jù)條件查詢商品列表分頁(yè)排序?qū)?yīng)的熔斷降級(jí)處理類請(qǐng)

springcloud開發(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 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);
    
    /**
     * 根據(jù)productId獲取商品信息
     * @param productId
     * @return
     */
    @GetMapping(value="/api/product/{productId}", produces=APPLICATION_JSON)
    public Result getProductById(@PathVariable("productId") Long productId);
    
    /**
     * 根據(jù)條件查詢商品列表(分頁(yè)、排序)
     * @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);
}

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

@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("請(qǐng)求失敗:%s, %s", SERVICE_UNAVAILABLE.value(), SERVICE_UNAVAILABLE.getReasonPhrase())).build();
    }
    
    protected  PageResult 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 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();
    }

}

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

前提場(chǎng)景是你的服務(wù)接口具有統(tǒng)一的報(bào)文格式,例如我的是Result或者PageResult,這樣才有統(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/xm...
2、https://github.com/penggle/xm...

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74789.html

相關(guān)文章

  • springcloud-feign實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)

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

    _DangJin 評(píng)論0 收藏0
  • springCloud學(xué)習(xí)3(Netflix Hystrix彈性客戶端)

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

    yagami 評(píng)論0 收藏0
  • 外行人都能看懂SpringCloud,錯(cuò)過(guò)了血虧!

    摘要:集群系統(tǒng)中的單個(gè)計(jì)算機(jī)通常稱為節(jié)點(diǎn),通常通過(guò)局域網(wǎng)連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負(fù)責(zé)了。于是,小周和就變成了協(xié)作開發(fā)。都是為了項(xiàng)目正常運(yùn)行以及迭代。 一、前言 只有光頭才能變強(qiáng) 認(rèn)識(shí)我的朋友可能都知道我這陣子去實(shí)習(xí)啦,去的公司說(shuō)是用SpringCloud(但我覺(jué)得使用的力度并不大啊~~)... 所以,這篇主要來(lái)講講SpringClou...

    沈建明 評(píng)論0 收藏0
  • 外行人都能看懂SpringCloud,錯(cuò)過(guò)了血虧!

    摘要:集群系統(tǒng)中的單個(gè)計(jì)算機(jī)通常稱為節(jié)點(diǎn),通常通過(guò)局域網(wǎng)連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負(fù)責(zé)了。于是,小周和就變成了協(xié)作開發(fā)。都是為了項(xiàng)目正常運(yùn)行以及迭代。 一、前言 只有光頭才能變強(qiáng) 認(rèn)識(shí)我的朋友可能都知道我這陣子去實(shí)習(xí)啦,去的公司說(shuō)是用SpringCloud(但我覺(jué)得使用的力度并不大啊~~)... 所以,這篇主要來(lái)講講SpringClou...

    enda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<