為了加深學(xué)習(xí)spring cloud過程中的理解,我決定將一些重點寫成文檔記錄下來,這也是這系列文章誕生的意義.可能有地方存在個人理解的偏差,或是一些錯誤,請盡量諒解,同時歡迎大家提出各種意見.本系列全部基于Spring Cloud Greenwich.RC2版本(Spring Boot 2.1.2 release).
Spring Cloud 1.x時期netflix的Eureka比較流行,但是2.0beta的Eureka已經(jīng)宣布停止維護,所以如果是Spring Cloud 2.x版本不推薦使用Eureka.其他可選的還有Consul,Zookeeper,Etcd等等.Consul和Zookeeper相比擁有多數(shù)據(jù)中心,健康檢查,UI管理,多語言支持等功能,所以下面選擇Consul作為服務(wù)注冊中心.
Consul的安裝及配置
這里介紹Linux下的Consul安裝步驟.因為Consul實際上是單個可執(zhí)行文件,只需下載解壓后將可執(zhí)行文件加入環(huán)境變量Path即可.
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip
unzip consul_1.4.0_linux_amd64.zip
mv consul /bin
操作完成后輸入consul看到幫助信息即為成功.輸入以下命令可以啟動consul服務(wù)端.
consul agent -server -bootstrap-expect=1 -node consul -data-dir=/tmp/data/consul -ui
-advertise:通知展現(xiàn)地址用來改變我們給集群中的其他節(jié)點展現(xiàn)的地址咳榜,一般情況下-bind地址就是展現(xiàn)地址
-bootstrap:用來控制一個server是否在bootstrap模式彪置,在一個datacenter中只能有一個server處于bootstrap模式屋确,當一個server處于bootstrap模式時默辨,可以自己選舉為raft leader顽染。
-bootstrap-expect:在一個datacenter中期望提供的server節(jié)點數(shù)目,當該值提供的時候,consul一直等到達到指定sever數(shù)目的時候才會引導(dǎo)整個集群禾嫉,該標記不能和bootstrap公用
-bind:該地址用來在集群內(nèi)部的通訊,集群內(nèi)的所有節(jié)點到地址都必須是可達的馅闽,默認是0.0.0.0
-client:consul綁定在哪個client地址上飘蚯,這個地址提供HTTP、DNS福也、RPC等服務(wù)局骤,默認是127.0.0.1.
-config-file:明確的指定要加載哪個配置文件
-config-dir:配置文件目錄,里面所有以.json結(jié)尾的文件都會被加載
-data-dir:提供一個目錄用來存放agent的狀態(tài)暴凑,所有的agent允許都需要該目錄峦甩,該目錄必須是穩(wěn)定的,系統(tǒng)重啟后都繼續(xù)存在
-dc:該標記控制agent允許的datacenter的名稱,默認是dc1
-encrypt:指定secret key凯傲,使consul在通訊時進行加密犬辰,key可以通過consul keygen生成,同一個集群中的節(jié)點必須使用相同的key
-join:加入一個已經(jīng)啟動的agent的ip地址冰单,可以多次指定多個agent的地址幌缝。如果consul不能加入任何指定的地址中,則agent會啟動失敗诫欠,默認agent啟動時不會加入任何節(jié)點涵卵。
-retry-join:和join類似,但是允許你在第一次失敗后進行嘗試荒叼。
-retry-interval:兩次join之間的時間間隔轿偎,默認是30s
-retry-max:嘗試重復(fù)join的次數(shù),默認是0被廓,也就是無限次嘗試
-log-level:consul agent啟動后顯示的日志信息級別坏晦。默認是info,可選:trace英遭、debug亦渗、info、warn多律、err搂蜓。
-node:節(jié)點在集群中的名稱,在一個集群中必須是唯一的相味,默認是該節(jié)點的主機名
-protocol:consul使用的協(xié)議版本
-rejoin:使consul忽略先前的離開殉挽,在再次啟動后仍舊嘗試加入集群中斯碌。
-server:定義agent運行在server模式,每個集群至少有一個server傻唾,建議每個集群的server不要超過5個
-ui: 提供ui管理功能.默認端口為8500.
啟動成功后,瀏覽器輸入localhost:8500,可以看到如下界面:
現(xiàn)在,consul已經(jīng)成功啟動了!
Spring Cloud Consul服務(wù)注冊
Spring Cloud提供了Consul服務(wù)注冊的依賴,只需要在pom.xml中加入以下依賴.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
同時在你的Spring Cloud的啟動類加上@EnableDiscoveryClient注解.這個注解是Spring Cloud的服務(wù)注冊抽象,啟用此注解后即可開啟服務(wù)發(fā)現(xiàn),方便以后更換其他的注冊中心.
@EnableDiscoveryClient
@SpringBootApplication
public class AuthAccountApplication {
public static void main(String[] args) {
SpringApplication.run(AuthAccountApplication.class, args);
}
}
接著還需要在bootstrap.yml(或者application.yml,建議前者)里面配置服務(wù)名稱和注冊中心地址.
spring:
application:
name: auth-account
cloud:
consul:
host: localhost
port: 8500
discovery:
healthCheckPath: /actuator/health
healthCheckInterval: 15s
啟動服務(wù)后,可以在Consul管理界面看到如下界面.
這樣就是成功注冊服務(wù)了!