javascript
Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能
文章目錄
- 概述
- 沒(méi)有添加fallback功能的示例
- 使用zuul為單個(gè)微服務(wù)添加容錯(cuò)和回退功能
- Step1. 新建微服務(wù)microservice-gateway-zuul-fallback
- Step2. FallbackProvider實(shí)現(xiàn)類(lèi)
- Step3. 測(cè)試
- 為全部微服務(wù)提供回退
- 代碼改造
- zuul-fallback工程application.yml修改
- 測(cè)試驗(yàn)證
- 代碼
概述
Spring Cloud【Finchley】-14 微服務(wù)網(wǎng)關(guān)Zuul的搭建與使用 # Step8. 網(wǎng)關(guān)功能-Hystrix監(jiān)控測(cè)試中我們測(cè)試了Zuul默認(rèn)集成了Hystrix的監(jiān)控,但是沒(méi)有提及容錯(cuò)。
這里我們來(lái)學(xué)習(xí)下zuul的容錯(cuò)與回退功能如何實(shí)現(xiàn)。
官方指導(dǎo):https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#hystrix-fallbacks-for-routes
沒(méi)有添加fallback功能的示例
順著 https://blog.csdn.net/yangshangwei/article/details/85850470#Step8_Hystrix_192 的操作步驟,如果我們將micorservice-provider-user 停掉,繼續(xù)多次調(diào)用,查看Dashboard
上圖可知:zuul的hystrix的監(jiān)控粒度是微服務(wù),而不是某個(gè)API,同樣的,經(jīng)過(guò)zuul的所有請(qǐng)求,都會(huì)被Hystrix保護(hù)起來(lái)。
zuul的配置規(guī)則如下:
zuul: routes:microservice-provider-user: /userprovider/**所以可以這么訪問(wèn): http://localhost:4534/userprovider/user/4
這樣返回是不是很難看,下面我們來(lái)為zuul添加容錯(cuò)。
使用zuul為單個(gè)微服務(wù)添加容錯(cuò)和回退功能
Step1. 新建微服務(wù)microservice-gateway-zuul-fallback
為了不影響別的微服務(wù),我們新建個(gè)支持容錯(cuò)與回退功能的微服務(wù) ,在maven父工程上右鍵 新增mave module
代碼同 microservice-gateway-zuul的,為了區(qū)別,修改下application.yml中的端口,將port修改為4535
Step2. FallbackProvider實(shí)現(xiàn)類(lèi)
主要是兩個(gè)方法
- getRoutes 方法,返回為哪個(gè)微服務(wù)提供回退功能
- getBody 方法,微服務(wù)不可用時(shí)返回的信息
Step3. 測(cè)試
此時(shí),通過(guò)zuul去訪問(wèn)微服務(wù)micorservice-provider-user
http://localhost:4535/userprovider/user/4
停掉micorservice-provider-user,再次訪問(wèn)
http://localhost:4535/userprovider/user/4
可見(jiàn)回退功能生效了。
為全部微服務(wù)提供回退
代碼改造
將 getRoute方法 返回 * or null
@Overridepublic String getRoute() {return "*";}簡(jiǎn)單起見(jiàn),僅修改這一個(gè)地方,至于返回什么信息,我們這里也不做太復(fù)雜,保持和上面的示例一致即可。
zuul-fallback工程application.yml修改
zuul-fallback工程的zuul部分的配置信息:
測(cè)試驗(yàn)證
接下來(lái)測(cè)試下,為了驗(yàn)證我們起兩個(gè)微服務(wù):
查看服務(wù)注冊(cè)情況 http://localhost:8761/
查看zuul的路由信息 http://localhost:4535/actuator/routes
先通過(guò)zuul微服務(wù)去訪問(wèn)其他兩個(gè)微服務(wù)
電影微服務(wù): http://localhost:4535/userprovider/user/3
{"id":3,"username":"artisan3","name":"小工匠三","age":30,"balance":300.00}用戶微服務(wù): http://localhost:4535/usermovie/movie/4
{"id":4,"username":"artisan4","name":"小工匠4","age":40,"balance":400.00}停掉micorservice-consumer-movie-ribbon,再次通過(guò)zuul訪問(wèn)consumer-movie
http://localhost:4535/usermovie/movie/4
必須使用zuul代理的路徑訪問(wèn)才能生效,使用http://localhost:4535/micorservice-consumer-movie-ribbon/movie/4 不行,因?yàn)橥5舴?wù)后zuul的路由信息中 http://localhost:4535/actuator/routes 已經(jīng)沒(méi)有該代理信息了。
同樣的停掉 microservice-provider-user, 再次訪問(wèn) http://localhost:4535/userprovider/user/3
最后順便看下zuul的路由信息
代碼
https://github.com/yangshangwei/SpringCloudMaster/tree/master/microservice-gateway-zuul-fallback
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spring Cloud【Finchle
- 下一篇: Spring Cloud【Finchle