SpringCloud+Nacos實現服務配置中心(Hoxton版本)

懸鈴木pp 發表於 2021-04-08
關於 Nacos Spring Cloud 的詳細文件請參看:Nacos Config和Nacos Discovery。

通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現配置的動態變更。

通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實現服務的註冊與發現。

 

前提條件
首先下載安裝一個nacos server,然後啟動nacos server。下載和安裝流程檢視https://www.cnblogs.com/ying-z/p/14630738.html
 
新建配置
可以通過兩種方式新建配置。
方式一:訪問Nacos Server頁面手動建立。
首先登入Nacos Server,地址一般為http://127.0.0.1:8848/nacos/index.html。
然後進入配置列表,點選新增配置按鈕,進入新增配置頁面。
SpringCloud+Nacos實現服務配置中心(Hoxton版本)

 

 SpringCloud+Nacos實現服務配置中心(Hoxton版本)

 

 

 注意:

這裡我建立Data Id為nacos-config.properties的配置檔案,其中Group為預設的DEFAULT_GROUP,配置檔案的格式也相應的選擇Properties,配置內容中新增配置nacos.config=hello_nacos,如圖所示。

SpringCloud+Nacos實現服務配置中心(Hoxton版本)

 

 

 方式二:通過呼叫Nacos Open API向Nacos Server釋出配置:dataId為nacos-config.properties,內容為nacos.config=hello_nacos

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config.properties&group=DEFAULT_GROUP&content=nacos.config=hello_nacos"

 

建立服務應用 

(1)使用SpringBoot,建立一個名為nacos-config的子工程。

(2)pom.xml檔案新增如下依賴。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
    <dependencies>
      <!-- 宣告Spring cloud的版本為Hoxton.SR3-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR3</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- 宣告Spring cloud alibaba版本為2.1.0.RELEASE -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.2.1.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!-- 宣告nacos-discovery依賴 -->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- 宣告nacos-config依賴 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

備註:如果不需要註冊該服務,也可以去掉nacos-discovery依賴。

注意:版本2.1.x.RELEASE 對應的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 對應的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 對應的是 Spring Boot 1.5.x 版本。

更多版本對應關係參考:版本說明 Wiki

(3)修改application.properties新增相關配置

server.port=9002
spring.application.name=nacos-config
spring.application.cloud.nacos.discovery.server-addr=127.0.0.1:8848

(4)建立配置檔案,檔名為bootstrap.properties。並在bootstrap.properties中配置Nacos server的地址和應用名。

注意:檔名是bootstrap.xxx,而不是application或者其他。因為Nacos同Spring Cloud Config一樣,在專案初始化時,要保證先從配置中心進行配置拉取,拉取配置之後,才能保證專案的正常啟動。SpringBoot中配置檔案的載入是存在優先順序順序的,bootstrap優先順序高於application。

這裡的配置檔案型別可以根據個人習慣選擇,我這裡用的時properties型別,配置內容如下:

#服務名稱
spring.application.name=nacos-config
#指定註冊中心的地址。如果你不需要註冊該服務,也可以去掉該項,並刪除discovery依賴。
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#指定配置中心的地址。
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#指定配置中心中配置檔案的格式。
#spring.cloud.nacos.config.file-extension=properties

之所以需要配置spring.application.name,是因為它是構成Nacos配置管理dataId欄位的一部分。 

在Nacos-Server配置管理,其中Data ID它的定義規則是: 
${prefix}-${spring.profile.active}.${file-extension}

prefix:預設為spring.application.name的值,也可以通過配置項spring.cloud.nacos.config.prefix來配置。

spring.profile.active:即為當前環境對應的profile,詳情可以參考 Spring Boot文件。可以通過配置項spring.profile.active來配置。當spring.profile.active為空時,對應的連線符 - 也將不存在,dataId的拼接格式變成 ${prefix}.${file-extension}。

file-exetension:為配置內容的資料格式,可以通過配置項spring.cloud.nacos.config.file-extension來配置。目前只支援properties和yaml型別。

(5)建立對外介面ConfigController,從nacos中讀取配置。

@RefreshScope
@RestController
public class ConfigController {
    @Value("${nacos.config}")
    private String configValue;

    @RequestMapping("/config/get")
    public String get() {
        return configValue;
    }
}

@RefreshScope:Spring Cloud的原生註解,可以使當前類下的配置支援動態更新。

@Value:通過@Value註解,去讀取key為nacos.config的配置的值,並通過/config/get介面返回。

到此程式碼部分的工作已經完成。

 

啟動服務進行測試

(1)保證Nacos-Server已經啟動。

(2)檢查Nacos-Server中配置列表中是否已經新增相應的配置檔案。

(3)啟動nacos-config專案。

(4)啟動成功後在Nacos控制檯中可以看到我們註冊的服務。

(5)此時呼叫介面進行測試http://127.0.0.1:9002/config/get,可以看到返回結果。

SpringCloud+Nacos實現服務配置中心(Hoxton版本)

 

 此時說明已經成功讀取到配置。

(6)下面我將Nacos-Server上的配置修改為hello_lars,看看能否動態更新。修改Nacos-Server上的配置後,重新整理http://127.0.0.1:9002/config/get頁面,結果更新為新的配置了。

SpringCloud+Nacos實現服務配置中心(Hoxton版本)

 

可以看到我通過Nacos-server的控制檯進行配置的修改,客戶端服務nacos-config也相應的進行熱更新。

相關文章