下載安裝
-
下載地址:https://developer.hashicorp.com/consul/install?product_intent=consul
-
解壓出來只有個 exe 檔案,在這個目錄開啟 shell,
consul --version
檢視版本,consul agent -dev
開發模式啟動啟動後訪問 localhost:8500 能正常訪問到 consul 介面
小試牛刀
-
工程匯入依賴
<!--SpringCloud consul config 讀取配置需要 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <!--SpringCloud consul discovery 註冊服務需要 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
-
啟動類使用註解
@EnableDiscoveryClient // 當前工程註冊到 consul @SpringBootApplication public class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class,args); } }
-
配置檔案,這裡需要兩個配置檔案,一個常規的 application.xml,裡面放 springboot 的配置,比如資料來源、mapper、mvc 等,consul 作為配置中心需要 bootstrap.yml。application.yml 就不貼了,貼一下 bootstrap.yml
spring: application: name: my-consul-test-service # consul 的配置放這裡 cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name} config: profile-separator: '-' # 工程和環境profile連線符是英文逗號‘,’太反人類了,至少國內沒有這樣的,這裡改成短橫線 format: YAML
-
啟動服務,consul 能看到 my-consul-test-service
-
到 consul 新增一個配置,看是否能讀取到
-
consul 的配置很特殊,總體格式為
config/服務,[環境]/data
,分為三層: config、服務、data -
比如 my-consul-test-service 服務,如果有兩個環境一個是 dev,一個是 prod,就要這樣建立
/config/my-consul-test-service,dev/data
、/config/my-consul-test-service,prod/data
。服務與環境之間是逗號,我們在 pom 裡面改成了 - -
建立 data
-
-
data 裡就是真正的配置資料,隨便寫一個
-
工程中寫個 controller,讀取配置檔案
@RefreshScope // 動態重新整理(預設55秒重新整理一次,如果想實時,可以修改預設重新整理時間) @GetMapping(value = "/testGetConfig") public String testGetConfig( @Value("${test.username}") String username){ return username; }
-
訪問介面測試
-
每次重啟配置檔案都會丟失,要把配置檔案持久化下來才行,增加個配置就行。這玩意應該不是主流吧,感覺還是 nacos 是主流,服務註冊不上去都還能跟原始碼,這個玩意不是java語言寫的,好像是 go 嗎?出問題看不了原始碼