Spring Cloud常見問題與總結(四)
一.Spring Cloud各元件配置屬性
1.簡介
Spring Cloud中的大部分問題都可使用配置屬性來解決。本篇將相關元件的配置地址羅列出來,做個小結。
2.Spring Boot的配置
Spring Boot的所有元件配置都在其官方文件的附錄,地址如下:
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/
3.Spring Cloud的配置屬性
Spring Cloud的所有元件配置都在其官方文件的附錄,地址如下:
http://cloud.spring.io/spring-cloud-static/Edgware.RELEASE/#_appendix_compendium_of_configuration_properties
4.原生配置
Spring Coud整合了很多類庫,例如Eureka、Ribbon、Feign等。這些元件自身也有一些配置屬性,如下:
1 Eureka的配置:https://github.com/netflix/eureka/wiki/Configuring-Eureka
2 Ribbon的配置:https://github.com/netflix/ribbon/wiki/Programmers-Guide
3 Hystrix的配置:https://github.com/netflix/Hystrix/wiki/Configuration
4 Turbine的配置:https://github.com/netflix/Turbine/wiki/Configuration-(1.x)
5.Zipkin的配置:https://github.com/openzipkin/zipkin/tree/master/zipkin-server
二.Spring Cloud定位問題思路總結
Spring Cloud進入Camden時代後,已經比較穩定。一般來說,問題都不是Spring Cloud本身的Bug導致。建議按照如下步驟進行定位。
1.排查配置問題
首先排查配置問題,舉幾個簡單的例子
- YALM縮排是否正確
如果YALM配置檔案縮排不正確,Spring Cloud應用程式無法正常啟動,或配置無法正常載入。
類似問題應該在編碼過程中嚴格避免。
- 配置屬性是否正確
配置屬性寫錯,不少初學者都會遇到這個問題。
很多場景下,這類問題可藉助IDE的提示功能來排查——當IDE不自動提示或給出警告時,應格外注意。
- 配置屬性位置是否正確
配置屬性位置不正確可能會導致應用的不正常。舉幾個例子說明:
-應當配置在Eureka Client專案上的屬性,配置在了Eureka Server專案上。
-應當些在bootstrap.yml中的屬性,寫在了application.yml中,例如:
spring:
cloud:
config:
uri: http://localhost:8080/
-應當寫在application.yml中的屬性,寫在了bootstrap.yml中,例如:
eureka.client.healthcheck.enabled=true
2.排查環境問題
若配置無誤,即可考慮允許環境問題是否存在,同樣舉幾個例子:
- 環境變數
例如Java環境變數、Maven環境變數以及Docker容器環境變數等。當應用無法正常工作時,應該確保環境變數配置正確。
- 依賴下載是否完整
曾經有人遇到無法正常啟動的問題,最終發現僅僅是依賴沒有下載完整所致。因此,建議在啟動應用前,使用以下命令打包,從而確認依賴的完整性。
mvn clean package
- 網路問題
微服務之間通過網路保持通訊,因此,網路常常是排查問題的關鍵。當問題發生時,可優先排查網路問題。
3.排查程式碼問題
經過以上步驟,依然沒有定位到Spring Cloud的問題,那麼可能是編寫程式碼出了問題。很多時候,常常因為少了某個註解,或是依賴缺失,而導致各種異常。
許多場景下,設定合理的日誌級別,會對問題定位有奇效。
4.排查Spring Cloud自身問題
如果確定不是自身程式碼問題,就可Debug一下Spring Cloud的程式碼了。同時,可在Github等平臺給Spring Cloud專案組提交Issue,然後參考官方答覆,嘗試避免相應問題。如問題無法規避,就需要Spring Cloud進行擴充套件,或者修復Spring Cloud的Bug,從而滿足需求。此時,請不要忘記在Spring Cloud的Github上Pull Request,協助官方改進Spring Cloud,讓Spring Cloud更加完善、穩定。
可供參考的資源
- 各專案自身的github,例如eureka的github:https://github.com/Netflix/eureka
- Spring Cloud對應專案的github,例如eureka專案在Spring Cloud Netflix中:https://github.com/spring-cloud/spring-cloud-netflix
- Spring Cloud的StackOverflow:https://stackoverflow.com/questions/tagged/spring-cloud
- Spring Cloud的Gitter:https://gitter.im/spring-cloud/home
更多精彩內容,掃我有驚喜