1. 程式人生 > >springcloud學習之路(五):遠端配置服務

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的輪流切換則說明遠端配置服務沒有正常工作。