真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloud怎樣使用Zuul實現(xiàn)容錯回退功能

本篇文章為大家展示了SpringCloud怎樣使用Zuul實現(xiàn)容錯回退功能,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元福鼎做網(wǎng)站,已為上家服務(wù),為福鼎各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

Zuul 主要功能就是轉(zhuǎn)發(fā),在轉(zhuǎn)發(fā)過程中我們無法保證被轉(zhuǎn)發(fā)的服務(wù)是可用的,這個時候就需要容錯機制及回退機制。

容錯機制

容錯,簡單來說就是當(dāng)某個服務(wù)不可用時,能夠切換到其他可用的服務(wù)上去,也就是需要有重試機制。在 Zuul 中開啟重試機制需要依賴 spring-retry。

首先在 pom.xml 中添加 spring-retry 的依賴,代碼如下所示。

org.springframework.retryspring-retry

在屬性文件中開啟重試機制以及配置重試次數(shù):

zuul.retryable=trueribbon.connectTimeout=500ribbon.readTimeout=5000ribbon.maxAutoRetries=1ribbon.maxAutoRetriesNextServer=3ribbon.okToRetryOnAllOperations=trueribbon.retryableStatusCodes=500,404,502

其中:

  • zuul.retryable:開啟重試。

  • ribbon.connectTimeout:請求連接的超時時間(ms)。

  • ribbon.readTimeout:請求處理的超時時間(ms)。

  • ribbon.maxAutoRetries:對當(dāng)前實例的重試次數(shù)。

  • ribbon.maxAutoRetriesNextServer:切換實例的最大重試次數(shù)。

  • ribbon.okToRetryOnAllOperations:對所有操作請求都進行重試。

  • ribbon.retryableStatusCodes:對指定的 Http 響應(yīng)碼進行重試。


可以啟動兩個 hystrix-feign-demo 服務(wù),默認(rèn) Ribbon 的轉(zhuǎn)發(fā)規(guī)則是輪詢,然后我們停掉一個 hystrix-feign-demo 服務(wù)。沒加重試機制之前,當(dāng)你請求接口的時候肯定有一次是會被轉(zhuǎn)發(fā)到停掉的服務(wù)上去的,返回的是異常信息。

當(dāng)我們加入了重試機制后,你可以循環(huán)請求接口,這個時候不會返回異常信息,因為 Ribbon 會根據(jù)重試配置進行重試,當(dāng)請求失敗后會將請求重新轉(zhuǎn)發(fā)到可用的服務(wù)上去。

回退機制

在 Spring Cloud 中,Zuul 默認(rèn)整合了 Hystrix,當(dāng)后端服務(wù)異常時可以為 Zuul 添加回退功能,返回默認(rèn)的數(shù)據(jù)給客戶端。

實現(xiàn)回退機制需要實現(xiàn) ZuulFallbackProvider 接口,代碼如下所示。

@Componentpublic class ServiceConsumerFallbackProvider implements ZuulFallbackProvider {private Logger log = LoggerFactory.getLogger(ServiceConsumerFallbackProvider.class);@Overridepublic String getRoute() {return "*";
    }@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;
            }@Overridepublic int getRawStatusCode() throws IOException {return this.getStatusCode().value();
            }@Overridepublic String getStatusText() throws IOException {return this.getStatusCode().getReasonPhrase();
            }@Overridepublic void close() {
            }@Overridepublic InputStream getBody() throws IOException {if (cause != null) {
                    log.error("", cause.getCause());
                }
                RequestContext ctx = RequestContext.getCurrentContext();
                ResponseData data = ResponseData.fail("

getRoute 方法中返回*表示對所有服務(wù)進行回退操作,如果只想對某個服務(wù)進行回退,那么就返回需要回退的服務(wù)名稱,這個名稱一定要是注冊到 Eureka 中的名稱。

通過 ClientHttpResponse 構(gòu)造回退的內(nèi)容。通過 getStatusCode 返回響應(yīng)的狀態(tài)碼。通過 getStatusText 返回響應(yīng)狀態(tài)碼對應(yīng)的文本。通過 getBody 返回回退的內(nèi)容。通過 getHeaders 返回響應(yīng)的請求頭信息。

通過 API 網(wǎng)關(guān)來訪問 hystrix-feign-demo 服務(wù),將 hystrix-feign-demo 服務(wù)停掉,然后再次訪問,就可以看到回退的內(nèi)容了,如圖 1 所示。
SpringCloud怎樣使用Zuul實現(xiàn)容錯回退功能

Zuul 高可用

跟業(yè)務(wù)相關(guān)的服務(wù)我們都是注冊到 Eureka 中,通過 Ribbon 來進行負(fù)載均衡,服務(wù)可以通過水平擴展來實現(xiàn)高可用。

現(xiàn)實使用中,API 網(wǎng)關(guān)這層往往是給 APP、Webapp、客戶來調(diào)用接口的,如果我們將 Zuul 也注冊到 Eureka 中是達不到高可用的,因為你不可能讓你的客戶也去操作你的注冊中心。

這時最好的辦法就是用額外的負(fù)載均衡器來實現(xiàn) Zuul 的高可用,比如我們最常用的 Nginx,或者 HAProxy、F5 等。

這種方式也是單體項目最常用的負(fù)載方式,當(dāng)用戶請求一個地址的時候,通過 Nginx 去做轉(zhuǎn)發(fā),當(dāng)一個服務(wù)掛掉的時候,Nginx 會把它排除掉。

如果想要 API 網(wǎng)關(guān)也能隨時水平擴展,那么我們可以用腳本來動態(tài)修改 Nginx 的配置,通過腳本操作 Eureka,發(fā)現(xiàn)有新加入的網(wǎng)關(guān)服務(wù)或者下線的網(wǎng)關(guān)服務(wù),直接修改 Nginx 的 upstream,然后通過重載(reload)配置來達到網(wǎng)關(guān)的動態(tài)擴容。

如果不用腳本結(jié)合注冊中心去做的話,就只能提前規(guī)劃好 N 個節(jié)點,然后手動配置上去。

上述內(nèi)容就是SpringCloud怎樣使用Zuul實現(xiàn)容錯回退功能,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前標(biāo)題:SpringCloud怎樣使用Zuul實現(xiàn)容錯回退功能
文章網(wǎng)址:http://weahome.cn/article/gijcjp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部