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