springcloud學習之路(五):遠端配置服務
在某些場景中,某個頁面中僅有一些欄位會經常變化,如果每次都找到網頁對應的服務,把它關掉,改變欄位,在重新部署,勢必挺影響服務體驗的,對運維人員也不太友善。能不能把這個欄位作為一個變數,每次我改變這個變數的值,網頁顯示的內容就會隨之自動變化?當然是可以的,這邊是遠端配置服務的作用。
對於遠端配置服務搭建,同樣三步走方法。
1、pom.xml檔案配置
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId >spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId >org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version></version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId >spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
前兩個依賴包之前已經介紹過多次了,在這不再贅述,第三個依賴包為定義服務的依賴包。
2、application.yml檔案配置
在resources資料夾下新建application.yml檔案,並填充內容如下:
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri: https://github.com/itOcean/spring-cloud/
server:
port: 8009 #定義服務的埠
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka/
第一部分宣告該服務的註冊名和遠端配置倉庫的地址,即某個配置檔案存放的位置,可以開啟https://github.com/itOcean/spring-cloud/,可以看到一個config.yml配置檔案,裡面的內容為itOcean:to be No.1;第二部分定義服務的埠;第三部分的作用是將該服務註冊到註冊中心。
3、後端程式碼
在java資料夾下,新建包com.springcloud.config,在該包下新建一個類ConfigServiceBootstrap作為啟動類,填充內容成如下:
@EnableAutoConfiguration
@EnableEurekaClient
@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServiceBootstrap{
public static void main(String[] args) {
SpringApplication.run(ConfigServiceBootstrap.class, args);
}
}
至此,遠端配置服務的定義就完成了,顯然遠端配置服務是服務於消費服務的,為了讓消費服務能夠使用遠端配置服務,則需要改造消費服務。
首先在消費服務user-center的resources資料夾下,新建另外一個配置檔案bootstrap.yml,填充內容如下:
spring:
cloud:
config:
# uri: http://localhost:8002/ #當無法通過服務名調取服務,可以通過地址來
discovery:
service-id: config-service
enabled: true
label: master #git分支
name: config
# profile: dev 檔名如果是config-dev,則需要加profile標籤,與name同一級
第二個需要改造的地方便是消費服務的rest包下的資源提供介面,將其改造成如下:
@RestController
public class ClientRest {
@Value("${itOcean:James}")
private String language;
@RequestMapping("/test")
public String test() throws InterruptedException {
return "test2 "+language;
}
}
@Value(“${itOcean:James}”)中的itOcean即為配置檔案中的那個itOcean,冒號後面內容表示,當無法從遠端載入itOcean欄位中的內容時,就把James賦給itOcean。
啟動遠端配置服務,重啟兩個消費服務,在瀏覽器中輸入http://localhost:8001/api/b/test,返回的內容為test1 to be No.1與test2 to be No.1的輪流切換。如果是test1 James與test2 James的輪流切換則說明遠端配置服務沒有正常工作。