在服務(wù)化的早期,服務(wù)不是很多,服務(wù)的注冊(cè)與發(fā)現(xiàn)并不是什么新鮮的名詞,Nginx+內(nèi)部域名服務(wù)器方式,甚至Nginx+host文件配置方式也能完成服務(wù)的注冊(cè)與發(fā)現(xiàn)。服務(wù)上下線需要在nginx,服務(wù)器做相應(yīng)的配置,一旦服務(wù)的IP端口發(fā)生變化,都需要在nginx上做相應(yīng)的配置,為了解決這個(gè)問題引入服務(wù)注冊(cè)中心。
服務(wù)注冊(cè),即服務(wù)在啟動(dòng)的時(shí)候就將服務(wù)的IP,端口,版本號(hào)等EndPoint注冊(cè)到注冊(cè)中心(Eueka,Zookeeper,Consul)對(duì)服務(wù)進(jìn)行統(tǒng)一管理.
服務(wù)發(fā)現(xiàn),簡(jiǎn)單的就是說,不管服務(wù)上下線,當(dāng)對(duì)某個(gè)服務(wù)發(fā)起請(qǐng)求時(shí),能夠快速的從本地緩存或者注冊(cè)中心的注冊(cè)列表中,快速找到服務(wù)提供者。
Tips
:代碼示例:https://github.com/SoftwareKing/spring-cloud-study/tree/master/sc-eureka-first
工程可以參考sc-rest-demo下面的sc-rest-provider和sc-rest-consumer,具體使用如下代碼所示:
|
|
大家注意到?jīng)],把http://localhost:8000 ,硬編碼到程序中,是不是比較low??梢圆捎蒙厦娲a中的方式:orderServiceUrl解決。但是這樣還是比較low,下面介紹一下引入Eureka實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)的處理。
1.引入依賴
|
|
|
|
3.創(chuàng)建Spring Boot主應(yīng)用程序啟動(dòng)代碼
|
|
啟動(dòng)Eureka server測(cè)試:
啟動(dòng)sc-eureka-first-server-HA01,訪問http://localhost:8761/ ,如下圖所示:
1.服務(wù)提供者,為了演示在這里提供一個(gè)簡(jiǎn)單的訂單查詢服務(wù)
,如工程sc-eureka-first-provider01
和sc-eureka-first-provider02
所示。
2.主程序入口代碼,如下所示:
|
|
Tips
:如果使用Eureka, 可以使用@EnableEurekaClient注解,但是推薦使用@EnableDiscoveryClient代替@EnableEurekaClient注解,因?yàn)锧EnableDiscoveryClient是一個(gè)高度的抽象, 來自于spring-cloud-commons, 由于Spring Cloud選型是中立的因此抽象出該接口, 當(dāng)服務(wù)注冊(cè)中心選型改變?yōu)镋ureka,ZK,Consul時(shí),不需要修改原有代碼中的注解。
3.服務(wù)提供者暴露的服務(wù)-OrderController.java
|
|
啟動(dòng)服務(wù)提供者,把服務(wù)注冊(cè)信息,注冊(cè)到Eureka Server注冊(cè)中心
啟動(dòng)sc-eureka-first-provider01,當(dāng)啟動(dòng)其中一個(gè)服務(wù)后刷新Eureka Server會(huì)出現(xiàn)安全模式,如下圖所示:
安全模式
啟動(dòng)sc-eureka-first-provider02,刷新Eureka Server如下圖所示。
安全模式
服務(wù)消費(fèi)者主要是一個(gè)簡(jiǎn)單的用戶服務(wù),用戶服務(wù)查詢訂單服務(wù)的訂單信息。
1.引入相應(yīng)的依賴
|
|
2.主程序入口代碼
|
|
|
|
如上述代碼,所示使用
discoveryClient.getInstances("sc-eureka-first-provider")
獲取服務(wù)名為sc-eureka-first-provider
的服務(wù)注冊(cè)列表信息。
先后啟動(dòng)sc-eureka-first-consumer,如沒有異常,打開瀏覽器訪問:http://localhost:8010/sc/user/2 ,debug如下所示可以看到
服務(wù)提供者端服務(wù)發(fā)現(xiàn)
在刷新一下Eureka Server,如圖下所示,此時(shí)安全模式關(guān)閉。
Eureka Server
關(guān)于安全模式,在本篇文章中,暫不討論,后面將會(huì)專寫一篇文章介紹,請(qǐng)暫時(shí)忽略。
使用EurekaClient獲取服務(wù)注冊(cè)信息
|
|
使用DiscoveryClient獲取服務(wù)注冊(cè)信息
|
|
上面這個(gè)例子使用Eureka實(shí)現(xiàn)了服務(wù)的注冊(cè)與發(fā)現(xiàn),但是有一個(gè)問題就是獲取服務(wù)注冊(cè)列表的方式比較low并且太方便,還有一個(gè)問題就是沒有使用負(fù)載均衡(Load Balance),這樣就沒法實(shí)現(xiàn)微服務(wù)的HA。在后面的文章將會(huì)介紹Eureka Server的HA和使用Robbin實(shí)現(xiàn)LB。。
聯(lián)系客服