最近項目的事真是搞的焦頭亂額,好多天沒更新文章了。今天抽空繼續前面的SpringCloud微服務實戰系列項目,以后我會基於面試的一些問題及原理展開,再深入到項目實戰。希望小伙伴們看完能有更大的收獲,不僅面試的基礎問題都知道了,再跟着實戰練練手,就能更加深入的掌握,對找工作也會有很大的幫助。
服務注冊與發現(面試題)
1、什么是服務的注冊與發現?
服務的注冊與發現,在任何RPC遠程調用框架中,都會有一個注冊中心。用來存放服務地址相關信息。首先我們得啟動注冊中心的服務,在注冊中心正常運行時,當提供者服務器啟動的時候,就會把當前自已服務器的信息,比如服務地址通訊地址等以別名方式注冊到注冊中心上。消費者以該服務別名的方式去注冊中心上獲取到實際的服務通訊地址,然后在實現本地rpc遠程調用。
目前服務發現的解決方案有Eureka,Consul,Zookeeper等等。SpringCloud默認使用eureka作為服務注冊中心。
2,介紹你對Eureka的理解?
Eureka是Netfix的一個子模塊,也是核心模塊之一。Eureka是一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。服務注冊與發現對於微服務架構來說是非常的重要,有了服務發現與注冊,只需要使用服務的標識符,就可以訪問到服務了,而不需要修改服務調用的配置文件了。功能類似於dubbo的注冊中心,比如Zookeeper。
Eureka采用了C-S的設計架構。Eureka Server作為服務注冊功能的服務器,它是服務注冊中心。而系統中的其他微服務,使用Eureka Client連接到Eureka Server並維持心跳連接。這樣系統的維護人員就可以通過Eureka Server來監控系統中各個微服務是否正常運行。
3, Eureka服務注冊流程?
1),服務啟動時會生成服務的基本信息對象InstanceInfo,然后在啟動時注冊到服務治理中心。
2),服務注冊完成后,會從服務治理中心拉取所有的服務信息,緩存在本地。
3),之后服務會30s(可配置)發送一個心跳信息,續約服務。
4),如果服務治理中心在90s內沒有收到一個服務的續約,就會認為服務已經掛了,會把服務注冊信息刪掉。
5),服務停止前,會主動發送一個停止請求,服務治理中心會刪除這個服務的信息。
6),如果Eureka Server收到的心跳包不足正常值的85%(可配置)就會進入自我保護模式,在這種模式下,Eureka Server不會刪除任何服務信息。
原理總結:
-
Eureka:就是服務注冊中心(可以是一個集群),對外暴露自己的地址;
-
提供者:啟動后向Eureka注冊自己信息(地址,提供什么服務);
-
消費者:向Eureka訂閱服務,Eureka會將對應服務的所有提供者地址列表發送給消費者,並且定期更新;
- 心跳(續約):提供者定期通過http方式向Eureka刷新自己的狀態;
服務注冊與發現實戰
接着上次的項目繼續開始實戰,我們先創建兩個服務模塊,創建完成如下:
然后在pom里添加Eureka的Service和Client等依賴。
父級pom依賴
customer和order模塊的pom依賴
為這個兩個服務添加啟動類和配置:
customer模塊的啟動類:
customer模塊的yml配置:
order模塊的啟動類:
order模塊的yml配置:
配置完成先啟動Eureka服務,然后分別啟動其他兩個服務,檢查注冊中心:
兩個服務已全部注冊成功,基礎已搭建完成。接着寫一個http請求的服務提供與消費調用。首先在Customer里寫一個提供者服務,如下:
並在啟動類里添加feign注解。
然后在Order模塊寫一個消費者服務:
如果提供者調用失敗處理:
再在order里寫一個http請求的測試接口:
還需要在order模塊的啟動類里添加feign注解:
到此處,代碼已寫完了,啟動customer和order服務准備測試。
測試結果,完美實現了服務注冊與調用。
下期預期:SpringCloud微服務實戰系列,微服務調用、網關搭建配置詳解。
想獲取源碼,請關注公眾號,發送“SpringCloud實戰”獲取