太久沒有更新姑隅,一時不知道該從哪兒開始莱坎,索性就從一個小技巧開始吧蛛蒙。
在之前的《Spring Cloud構(gòu)建微服務(wù)架構(gòu)》系列博文中糙箍,我們經(jīng)常會需要啟動多個實例的情況來測試注冊中心、配置中心等基礎(chǔ)設(shè)施的高可用宇驾,也會用來測試客戶端負(fù)載均衡的調(diào)用等倍靡。但是,我們一個應(yīng)用只能有一個端口號课舍,這就使得在本機(jī)測試的時候塌西,不得不為同一個服務(wù)設(shè)置不同的端口來進(jìn)行啟動。
在本地用不同端口啟動同一服務(wù)實例的方法有很多筝尾。最傳統(tǒng)的我們可以粗暴地修改配置文件中的server.port
屬性來分別啟動多個實例捡需,這種方法雖然可以實現(xiàn),但是非常的不方便筹淫。比較好的一種方法是在啟動的時候通過命令的方式為server.port
屬性來設(shè)置不同的值站辉,這樣我們的配置文件就不用反復(fù)的進(jìn)行修改了。
在本文中损姜,我們將介紹另外一種方法:采用隨機(jī)端口的方式來設(shè)置各個服務(wù)實例饰剥,這樣我們不用去編輯任何命令就可以在本地輕松地啟動多個實例了。
使用隨機(jī)端口
為Spring Cloud的應(yīng)用實用隨機(jī)端口非常簡單摧阅,主要有兩種方法:
- 設(shè)置
server.port=0
汰蓉,當(dāng)應(yīng)用啟動的時候會自動的分配一個隨機(jī)端口,但是該方式在注冊到Eureka的時候會一個問題:所有實例都使用了同樣的實例名(如:Lenovo-zhaiyc:hello-service:0
)棒卷,這導(dǎo)致只出現(xiàn)了一個實例顾孽。所以祝钢,我們還需要修改實例ID的定義,讓每個實例的ID不同若厚,比如使用隨機(jī)數(shù)來配置實例ID:
server.port=0
eureka.instance.instance-id=${spring.application.name}:${random.int}
- 除了上面的方法拦英,實際上我們還可以直接使用
random
函數(shù)來配置server.port
。這樣就可以指定端口的取值范圍测秸,比如:
server.port=${random.int[10000,19999]}
由于默認(rèn)的實例ID會由server.port
拼接疤估,而此時server.port
設(shè)置的隨機(jī)值會重新取一次隨機(jī)數(shù),所以使用這種方法的時候不需要重新定義實例ID的規(guī)則就能產(chǎn)生不同的實例ID了乞封。