eureka官方已經正式宣佈:自2.0起再也不維護該項目,並在github 項目wiki上放出了一段嚇唬人的話:
html
大意就是:從2.x起,官方不會繼續開發了,若是須要使用2.x,風險自負。但其實我以爲問題並不大,eureka目前的功能已經很是穩定,就算不升級,服務註冊/發現這些功能已經夠用。node
若是想尋找替代方案的話,建議採用功能更爲豐富的consul,除了服務註冊、發現,consul還提供了k-v存儲等其它功能,consul的官網針對其它同類軟件也作了詳細比較,詳見 consul vs other software,有興趣的能夠看看,特別是有一句話,翻譯成大白話就是:我不是針對在座的各位,我想說除我以外其它的都是渣渣(足見其至關的自信!)linux
進入正題,先來看consul的部署安裝:git
1、集羣規劃github
consul藉助agent來運行,相似elk的logstash agent 或 zabbix監控系統的agent ,每一個須要被發現的服務上,經過consul agent client 來收集服務自己的信息,而後向consul agent server彙報, consul server 能夠集羣部署。web
規劃一下:算法
序號 | 節點ip | 節點名稱 | 角色 |
1 | 10.0.xx.55 | server1 | server |
2 | 10.0.xx.203 | server2 | server |
3 | 10.0.xx.204 | server3 | server |
4 | 10.0.xx.205 | client1 | client & web ui |
這是按正式生產環境來規劃的,若是本機開發,有一個方便的dev模式(後面再講)。 上述表格中,咱們打算組建3個server節點的consul server cluster,另外有1個client,模擬客戶端以及充當consul的web admin ui(管理界面)。spring
2、下載安裝json
目前consul的最高版本爲1.2.0,只須要把相應的release壓縮包 下載到機器上解壓便可。bootstrap
2.1 wget https://releases.hashicorp.com/consul/1.2.0/consul_1.2.0_linux_amd64.zip
2.2 unzip consul_1.2.0_linux_amd64.zip
假設都解壓到~/consul/bin目錄下,解壓後會獲得1個名爲consul的可執行文件
2.3 sudo cp ./consul /usr/local/bin
爲了方便,能夠將其複製到/usr/local/bin下(本步驟可選,須要root權限)
而後檢查下是否安裝成功:
|
若是出現版本輸出,就表示能夠了(4個節點上,每臺機器上都重複上述操做,全安裝好)
3、啓動
3.1 啓動server端
基本的命令爲:
|
看着一大堆參數,其實不復雜
-server 表示是以服務端身份啓動
-bind 表示綁定到哪一個ip(有些服務器會綁定多塊網卡,能夠經過bind參數強制指定綁定的ip)
-client 指定客戶端訪問的ip(consul有豐富的api接口,這裏的客戶端指瀏覽器或調用方),0.0.0.0表示不限客戶端ip
-bootstrap-expect=3 表示server集羣最低節點數爲3,低於這個值將工做不正常(注:相似zookeeper同樣,一般集羣數爲奇數,方便選舉,consul採用的是raft算法)
-data-dir 表示指定數據的存放目錄(該目錄必須存在)
-node 表示節點在web ui中顯示的名稱
啓動成功後,終端窗口不要關閉,能夠在瀏覽器裏,訪問下,相似 http://10.0.xx.55:8500/,正常的話,應該會看到一行文字:Consul Agent。
爲了防止終端關閉後,consul退出,能夠在剛纔命令上,加點東西,相似:
nohup xxx > /dev/null 2>&1 &
即:
|
將其轉入後臺運行。
另外2臺節點上,也作相似操做:
1 |
|
注意更改bind參數的ip,以及node參數裏的節點名稱。
1 |
|
3.2 啓動client端
幾乎徹底同樣,只是把-server 去掉,在10.0.xx.205上運行:
1 |
|
4、組建cluster
如今咱們有了3個server node + 1個client node,可是這4個節點都是相互獨立的,能夠在任一節點上運行:
consul members
能夠看到,只有自身節點的信息。
要加本身加入集羣,能夠運行如下命令(假設:其它3個節點,都加入10.0.xx.55)
consul join 10.0.xx.55
成功後,會輸出:
Successfully joined cluster by contacting 1 nodes.
其它2個節點(指:10.0.xx.55以外的節點)上相似上述操做,都加入集羣中,完成後,能夠再次驗證
能夠看到4臺節點的信息都有了。
tips: 若是反過來,要將1個節點從集羣中撤掉,能夠在該節點上運行consul leave 便可。
5、web ui
10.0.xx.205上,可能有同窗注意到了,啓動consul時,咱們加了一個 -ui 的參數,這表明將啓動consul自帶的web管理界面,訪問 http://10.0.xx.205:8500/ui
能夠看到各節點的信息。
6、服務註冊/發現/註銷
如今services裏,除了consul外,並無其它服務註冊進來。能夠經過api 手動註冊一個服務:
用postman(或其它rest api工具、curl都行),向 http://10.0.xx.55:8500/v1/agent/service/register ,發送如下json,http method指定爲PUT, Content-Type指定爲application/json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
其中的參數名一看就能大概猜出含義,就不詳細解釋了,想深刻研究的,建議參看consul api文檔。發送完成後,再看web ui
就能看到新註冊的服務my-service-name,特別要提一下的是tags,eureka中有metadata-map能夠提供元數據,consul中對應的特性爲tags。
除了web ui,還能夠經過rest接口,發現服務的詳細信息:
http://10.0.21.55:8500/v1/agent/services 這個rest api能夠列出全部服務:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
服務發現,其實就是經過這個api實現的,有服務註冊就會有反向操做:服務註銷。一樣也是經過api完成
curl -X PUT http://10.0.21.55:8500/v1/agent/service/deregister/my-service-id
這樣就把my-service-id這個服務給註銷了
7、dev開發者模式
前面這一陣折騰須要好幾臺機器,本機調試開發時不太方便,爲此consul體貼的提供了dev模式,使用方式極爲簡單
1 |
|
開發模式,自帶了web ui,直接http://localhost:8500/ 便可,很是方便。
8、與spring-cloud的集成
前面這些鋪墊,其實就是爲了與spring-cloud的集成,很是簡單:
1 |
|
添加對org.springframework.cloud:spring-cloud-starter-consul-discovery的依賴
而後application.yml中配置以下節點:
1 2 3 4 5 6 7 8 9 10 11 |
|
注:
通常在須要部署的微服務機器上,都約定安裝consul agent,因此這裏host一般指定爲127.0.0.1 (本機測試consul可用dev模式啓動);
tags 至關於eureka裏的metadata-map,你們根據實際須要設置
healthCheckPath 爲健康檢查的url,能夠配置成/health或其它能檢測出微服務運行狀態的url
healthCheckInterval 爲healthcheck的時間間隔
instanceId這一長串,spring cloud官網文檔的推薦,爲了保證生成一個惟一的id ,也能夠換成
1 |
|
(即:以ip結尾),這個instanceId即爲consul service列表中的service id
最後提醒一下:若是使用consul來替換eureka,而你的項目中又依賴了eureka的jar包,最好將eureka的自動配置從啓動類裏排除掉,參考下面:
注:若是項目的pom/gradle依賴項裏,已經移除了org.springframework.cloud:spring-cloud-starter-eureka-server 就不用exclude排除EurekaClientAutoConfiguration,另外上圖中@EnableEurekaClient 也能夠換成@EnableDiscoveryClient
參考文檔:
一、https://www.consul.io/api/index.html