摘要:開發(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 ResultcreateProduct(@RequestBody Product product); /** * 修改商品 * @param product */ @PutMapping(value="/api/product/update", produces=APPLICATION_JSON, consumes=APPLICATION_JSON) public Result
對(duì)應(yīng)的熔斷降級(jí)處理類:
@Component public class ProductFallbackApiService implements ProductApiService { private static final HttpStatus SERVICE_UNAVAILABLE = HttpStatus.SERVICE_UNAVAILABLE; protectedResult 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本文將采用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
摘要:本文重點(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)介紹一...
摘要:在艙壁模式中可以隔離每個(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)鍵部分。但是通...
摘要:集群系統(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...
摘要:集群系統(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...
閱讀 3513·2021-10-08 10:04
閱讀 863·2019-08-30 15:54
閱讀 2180·2019-08-29 16:09
閱讀 1347·2019-08-29 15:41
閱讀 2272·2019-08-29 11:01
閱讀 1735·2019-08-26 13:51
閱讀 1026·2019-08-26 13:25
閱讀 1806·2019-08-26 13:24