国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring Cloud】深入理解 Nacos 的統(tǒng)一配置管理,配置熱更新,多環(huán)境配置共享,集群搭建

這篇具有很好參考價值的文章主要介紹了【Spring Cloud】深入理解 Nacos 的統(tǒng)一配置管理,配置熱更新,多環(huán)境配置共享,集群搭建。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言:為什么要統(tǒng)一配置管理

在微服務(wù)架構(gòu)中,配置管理是一個至關(guān)重要的問題。隨著系統(tǒng)規(guī)模的擴大,配置的管理和更新變得更加繁瑣。Nacos 作為一個全能的服務(wù)發(fā)現(xiàn)和配置管理平臺,為解決這一問題提供了全方位的支持。在本文中,我們將深入理解 Nacos 的配置管理,包括配置的統(tǒng)一管理、熱更新、多環(huán)境配置共享以及Nacos集群的搭建。

一、Nacos 的配置管理

1.1 在 Nacos 中添加配置文件

Nacos 提供了直觀的 Web 界面,使得我們可以輕松地添加和管理配置文件。通過 Web 界面,我們可以為不同的微服務(wù)添加對應的配置信息,包括數(shù)據(jù)庫連接、端口號等。

下面將演示如何在 Nacos 的控制臺上添加新的配置文件:

  1. 首先在 Nacos 的控制臺中點擊配置管理,然后選擇右側(cè)的加號添加新的配置:
    nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

  2. 然后設(shè)置以下配置信息,最后點擊發(fā)布:
    nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

在這個配置信息中,指定了 Data ID 為 userservice-dev.yml,并在配置內(nèi)容中設(shè)置了一個日期的格式。

關(guān)于 Data ID 命名格式的說明:

  1. 首先要確保 Data ID 的唯一性,使用具體的服務(wù)名稱就可確保唯一性;
  2. 采用 Servicename-profile 的格式,其中 profile 代表的是目前服務(wù)的運行環(huán)境,如dev
  3. 配置文件可采用多種類型,如 yml、properties等,根據(jù)不同格式的配置,Data ID 的后綴名也會不同。例如,使用userservice-dev.yml作為 Data ID 表示該配置文件為 YAML 格式。

關(guān)于配置內(nèi)容的說明:

配置內(nèi)容通常包含了應用程序的參數(shù)、設(shè)置、以及其他與應用程序運行有關(guān)的信息。這些配置信息可能包括但不限于:

  1. 數(shù)據(jù)庫連接信息: 包括數(shù)據(jù)庫的URL、用戶名、密碼等。

  2. 服務(wù)端口號: 應用程序運行的端口,用于處理外部請求。

  3. 第三方服務(wù)的地址和密鑰: 與其他服務(wù)進行交互時所需的信息。

  4. 日志級別和格式: 控制應用程序日志輸出的詳細程度和格式。

  5. 緩存策略: 配置緩存的大小、過期時間等相關(guān)參數(shù)。

  6. 安全配置: 包括認證和授權(quán)相關(guān)的配置信息。

  7. 任務(wù)調(diào)度配置: 配置定時任務(wù)的執(zhí)行策略和參數(shù)。

  8. 其他運行時參數(shù): 如線程池大小、連接超時等。

配置內(nèi)容的特點在于它們是經(jīng)常需要變化的,而不同環(huán)境下的配置可能也有所不同。因此,合理管理和更新配置信息對于應用程序的靈活性和可維護性至關(guān)重要。通過使用Nacos等配置中心,可以實現(xiàn)配置信息的集中管理、動態(tài)更新,從而更好地適應應用程序的不斷變化。

1.2 微服務(wù)獲取配置

在微服務(wù)應用中,獲取配置信息是一個關(guān)鍵的任務(wù)。配置信息包括數(shù)據(jù)庫連接、服務(wù)端口、第三方服務(wù)的地址、日志設(shè)置等等,這些信息對于應用程序的正確運行至關(guān)重要。在沒有 Nacos 配置時和有 Nacos 配置時,微服務(wù)獲取配置信息的過程有所不同。

1.2.1 沒有 Nacos 配置的情況下

在沒有Nacos配置中心的情況下,微服務(wù)獲取配置信息的步驟如下圖所示:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

說明:

  1. 當項目啟動時,應用程序會讀取本地的配置文件,這些配置文件通常存儲在類路徑中,例如application.propertiesapplication.yml。
  2. 隨后,應用程序會根據(jù)配置文件中的內(nèi)容創(chuàng)建Spring容器,加載相關(guān)的Bean對象。
  3. 當應用程序需要獲取配置信息時,它會直接從Spring容器中獲取。

1.2.2 有 Nacos 配置的情況下

在有 Nacos 配置中心的情況下,微服務(wù)獲取配置信息的步驟如下圖所示:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

說明:

  1. 在有 Nacos 配置的情況下,首先需要知道 Nacos 配置中心的地址以及配置文件的信息。這些信息通常存儲在應用程序的bootstrap.ymlbootstrap.properties中。
  2. 當項目啟動后,應用程序會先讀取bootstrap.yml中的配置,獲取 Nacos 配置中心的地址和其他必要信息。
  3. 隨后,應用程序會連接到 Nacos 配置中心,獲取配置信息。這些配置信息包括數(shù)據(jù)庫連接、第三方服務(wù)的地址、日志設(shè)置等。
  4. 在獲取 Nacos 配置信息之后,應用程序會再次讀取本地的配置文件,例如application.propertiesapplication.yml。
  5. 最終,應用程序會將 Nacos 配置和本地配置合并,創(chuàng)建 Spring 容器,加載相關(guān)的 Bean 對象。

在有 Nacos 配置中心的情況下,Nacos 充當了集中式的配置管理中心,使得微服務(wù)可以動態(tài)獲取配置信息并實現(xiàn)配置的集中管理,從而提高了靈活性和可維護性。

1.3 本地配置文件的修改

  1. 引入 Nacos 的配置管理客戶端依賴:
<!--nacos配置管理依賴-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. user-service中的 resource 目錄下添加一個bootstrap.yml文件,這個文件是引導文件,優(yōu)先級高于application.yml
spring:
  application:
    name: userservice # 服務(wù)名稱
  profiles:
    active: dev #開發(fā)環(huán)境,這里是 dev
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos 地址
      config:
        file-extension: yaml  # 文件后綴名

當新增了 bootstrap.yml 配置文件之后,就可以將application.yml 重復的配置項刪除掉。

1.4 代碼獲取配置信息

當所有的配置都修改完成之后,如何證明配置成功了呢?此時就可以使用代碼來讀取,看看能否讀取到 Nacos 中添加的配置信息。讀取配置信息可以使用 @Value注解讀取。

例如,修改 UserController 中的代碼如下:

@Value("${pattern.dateformat}")
private String dateformat;

@GetMapping("now")
public String now() {
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

然后重啟服務(wù)器,使用瀏覽器訪問 now 這個接口:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

成功輸出了時間,說明 Nacos 中新增的配置也成功生效了。

二、配置文件的熱更新

2.1 修改配置文件

此時,如果我們想要修改 Nacos 中的配置內(nèi)容,比如修改日期的格式如下:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

當修改完成之后,再次通過瀏覽器訪問,發(fā)現(xiàn)并沒有生效:
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
如果重啟 user-service服務(wù),再次通過瀏覽器訪問才生效了:
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
但是如果想要修改了配置文件之后立馬就生效,并且在實際生產(chǎn)環(huán)境中,也不能因為修改一點配置信息就重啟服務(wù)器吧,那么此時又該然如何操作呢?

2.2 設(shè)置配置文件熱更新

要達到這個目的,就需要使用到配置文件的熱更新,即 Nacos 中的配置文件變更后,微服務(wù)無需重啟就可以感知。在代碼中,有兩種實現(xiàn)配置文件熱更新的方法:

方式一: 在 @Value 注入的變量所在類上添加注解 @RefreshScope 注解
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
添加完注解之后,重啟微服務(wù),當前訪問輸出的時間格式如下:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
然后,再次修改 Nacos 的配置文件中的時間格式:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

此時并沒有重啟微服務(wù),直接通過瀏覽器訪問,其輸出的時間格式如下,和剛修改的格式相匹配,則說明熱更新配置成功了:
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

并且此時,user-service的控制臺也會輸出相關(guān)配置文件相關(guān)的信息:
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

方式二:使用 @ConfigurationProperties注解

使用@ConfigurationProperties注解時,會把從配置文件中讀取到的內(nèi)容封裝到一個對象中,因此首先需要創(chuàng)建一個類:

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

然后修改 UserController 中的代碼,并注釋掉方式一的相關(guān)代碼:

@Autowired
private PatternProperties properties;

@GetMapping("now")
public String now() {
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
}

重啟微服務(wù),此時訪問瀏覽器輸出的時間格式如下:
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

然后再次修改Nacos配置文件中的日期格式:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

此時并沒有重啟微服務(wù),直接通過瀏覽器訪問,其輸出的時間格式如下,和剛修改的格式相匹配,則說明熱更新配置成功了:
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

三、多環(huán)境配置共享

在微服務(wù)應用中,通常需要在不同的環(huán)境(開發(fā)、測試、生產(chǎn)等)下使用不同的配置信息。但如果在多個環(huán)境中的配置內(nèi)容是相同的,為了避免重復配置,可以實現(xiàn)多環(huán)境配置文件的共享。Nacos提供了一種簡單而有效的方式來實現(xiàn)這一目標。

3.1 共享配置文件命名

3.1 共享配置文件命名

在微服務(wù)啟動時,從 Nacos 中讀取多個配置文件時,采用以下命名規(guī)范:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

不論 spring.profiles.active 如何變化,[spring.application.name].yaml 這個文件都會被加載。因此,多環(huán)境共享的配置可以寫入這個文件中。

示例:

假設(shè) spring.application.nameuserservice,則對應的配置文件命名如下:

  • userservice.yaml:共享配置文件,包含所有環(huán)境通用的配置。
server:
  port: 8080
database:
  url: jdbc:mysql://localhost:3306/userservice
  username: admin
  password: admin123
  • userservice-dev.yaml:開發(fā)環(huán)境配置文件,覆蓋需要變更的配置項。
spring:
  profiles:
    active: dev
database:
  url: jdbc:mysql://localhost:3306/userservice_dev
  • userservice-test.yaml:測試環(huán)境配置文件,同樣覆蓋需要變更的配置項。
spring:
  profiles:
    active: test
database:
  url: jdbc:mysql://testdb:3306/userservice_test

這樣的命名規(guī)范使得在不同環(huán)境下維護配置變得更加清晰和方便,同時確保了在多環(huán)境中可以共享相同的配置信息。

3.2 設(shè)置多環(huán)境配置文件共享

在 Nacos 的環(huán)境列表中新增一個配置文件userservice.yaml

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
當添加完共享配置文件之后,再次修改 PatternProperties 類和UserController來讀取共享配置信息:

PatternProperties

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
    private String envSharedValue;
}

UserController類:

@GetMapping("prop")
public PatternProperties properties(){
    return properties;
}

然后重啟這個user-service服務(wù),注意這個服務(wù)當前的環(huán)境是dev環(huán)境,對應的端口號是 8081。

另外,再開啟一個user-service服務(wù),端口號為 8082,使其處于test 環(huán)境,但并不用在創(chuàng)建一個配置文件,直接通過IDEA進行設(shè)置即可:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

由于并沒有創(chuàng)建test環(huán)境的配置文件,因此可以推測 8082 端口對應的服務(wù)除了共享環(huán)境變量外的其他字段都應該為null

分別訪問這兩個服務(wù)的prop接口,結(jié)果如下:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

至此,便成功實現(xiàn)了配置文件的共享。

3.3 配置文件的優(yōu)先級

如果當不同的配置文件擁有不同的屬性時,配置文件的優(yōu)先級有是怎么樣的呢?其實這個問題可以很容易的找出答案。那就是中不同的配置文件中設(shè)置相同的屬性,看看最終的結(jié)果以哪個為準就能夠得出優(yōu)先級的關(guān)系了。

  1. 首先在本地的配置文件application.yml文件中新增以下內(nèi)容:
    nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
    并修改 PatternProperties代碼:
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
    private String envSharedValue;
    private String name; 
}

此時毫無疑問讀取到的就是本地配置,因為 Nacos 中并沒有配置這個屬性。
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

  1. 然后在 Nacos 的 userservice.yaml 配置文件中設(shè)置這個屬性
    nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

刷新瀏覽器,發(fā)現(xiàn)是以共享配置文件為準,因此得出結(jié)論是Nacos的共享配置文件的優(yōu)先級大于本地配置文件。
nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

  1. 接著也在 userservice-dev.yaml 中也設(shè)置這個屬性

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos
刷新瀏覽器,發(fā)現(xiàn)是以Nacos的開發(fā)配置文件為準,因此得出結(jié)論是 Nacos 開發(fā)環(huán)境配置文件的優(yōu)先級大于共享配置文件。

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

綜上所述,不同的配置文件的優(yōu)先級關(guān)系如下:

  • 服務(wù)名-profile.yaml >服務(wù)名稱.yaml > 本地配置

更詳細地,在 Nacos 配置管理中,不同來源的配置文件有不同的優(yōu)先級。優(yōu)先級從高到低排列如下:

  1. 環(huán)境配置(Profile): 環(huán)境配置具有最高優(yōu)先級。當在Nacos中使用 [spring.application.name]-[spring.profiles.active].yaml 格式命名的配置文件時,其中的 spring.profiles.active 將指定當前環(huán)境,優(yōu)先級最高。

  2. 服務(wù)名.yaml: 使用 [spring.application.name].yaml 格式命名的配置文件,其中的 spring.application.name 即服務(wù)名。這是服務(wù)級別的通用配置,具有較高優(yōu)先級。

  3. extension-config: 通過Nacos配置中心的 Data ID 中的 extension-config 配置項獲取的配置。這個配置項通常用于擴展配置,例如定制化的業(yè)務(wù)配置。

  4. extension-configs: 通過Nacos配置中心的 Data ID 中的 extension-configs 配置項獲取的配置。這個配置項也用于擴展配置,但具有比單獨的 extension-config 更低的優(yōu)先級。

  5. shared-configs: 通過Nacos配置中心的 Data ID 中的 shared-configs 配置項獲取的配置。這個配置項通常用于共享配置,例如團隊內(nèi)部約定的通用配置。

  6. 本地配置: 本地配置是在應用程序中直接指定的配置項,具有最低的優(yōu)先級。這包括在應用程序的配置文件(如 application.ymlapplication.properties)中定義的配置項。

優(yōu)先級示例:

假設(shè)有一個微服務(wù)名為 userservice,當前環(huán)境為 dev,那么優(yōu)先級順序為:

  • userservice-dev.yaml(環(huán)境配置) > userservice.yaml(服務(wù)名.yaml) > extension-config > extension-configs > shared-configs > 本地配置

這個優(yōu)先級規(guī)則確保了在不同層次和來源的配置中,能夠靈活地管理和覆蓋配置項,從而實現(xiàn)更精細化的配置控制。

四、Nacos 集群搭建

搭建 Nacos 集群是確保系統(tǒng)可用性和容錯性的關(guān)鍵步驟。通過集群部署,可以分攤負載、提高系統(tǒng)的并發(fā)處理能力,并在某一節(jié)點發(fā)生故障時保持系統(tǒng)的正常運行。

以下是 Nacos 集群搭建的基本步驟:

  • 搭建數(shù)據(jù)庫,初始化數(shù)據(jù)庫表結(jié)構(gòu)
  • 下載 nacos 安裝包
  • 配置 nacos
  • 啟動 nacos 集群
  • nginx 反向代理

下面是詳解的搭建過程。

4.1 集群結(jié)構(gòu)圖

官方給出的 Nacos 集群圖:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

其中包含3個 nacos 節(jié)點,然后一個負載均衡器代理 3 個 Nacos。這里負載均衡器可以使用 nginx。

計劃搭建的集群結(jié)構(gòu):

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

三個 nacos 節(jié)點的地址:

節(jié)點 IP PORT
nacos1 192.168.150.1 8845
nacos2 192.168.150.1 8846
nacos3 192.168.150.1 8847

4.2 初始化數(shù)據(jù)庫

Nacos 默認數(shù)據(jù)存儲在內(nèi)嵌數(shù)據(jù)庫 Derby 中,不屬于生產(chǎn)可用的數(shù)據(jù)庫。

官方推薦的最佳實踐是使用帶有主從的高可用數(shù)據(jù)庫集群,但是這里以單點的數(shù)據(jù)庫為例。

首先新建一個數(shù)據(jù)庫,命名為 nacos,而后導入下面的 SQL:

CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '內(nèi)容',
  `gmt_modified` datetime NOT NULL COMMENT '修改時間',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租戶字段';


/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整個集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個配置大小上限,單位為字節(jié),0表示使用默認值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數(shù),,0表示使用默認值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),0表示使用默認值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數(shù)量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(50) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租戶字段',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租戶改造';


/******************************************/
/*   數(shù)據(jù)庫全名 = nacos_config   */
/*   表名稱 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個配置大小上限,單位為字節(jié),0表示使用默認值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個數(shù)',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),0表示使用默認值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數(shù)量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租戶容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '創(chuàng)建時間',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE `users` (
	`username` varchar(50) NOT NULL PRIMARY KEY,
	`password` varchar(500) NOT NULL,
	`enabled` boolean NOT NULL
);

CREATE TABLE `roles` (
	`username` varchar(50) NOT NULL,
	`role` varchar(50) NOT NULL,
	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

4.3 配置 Nacos

進入 nacos 的 conf 目錄,修改配置文件 cluster.conf.example,重命名為cluster.conf

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

然后添加地址:

127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847

然后修改 application.properties 文件,添加數(shù)據(jù)庫配置

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123

4.4.啟動

將nacos文件夾復制三份,分別命名為:nacos1、nacos2、nacos3

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

然后分別修改三個文件夾中的application.properties,

nacos1:

server.port=8845

nacos2:

server.port=8846

nacos3:

server.port=8847

然后分別啟動三個nacos節(jié)點:

startup.cmd

4.5.nginx反向代理

將 nginx 安裝到非中文目錄下:

nacos2 配置 spring cloud 指定多個配置文件,微服務(wù),spring cloud,服務(wù)器,nacos

修改conf/nginx.conf文件,配置如下:

upstream nacos-cluster {
    server 127.0.0.1:8845;
	server 127.0.0.1:8846;
	server 127.0.0.1:8847;
}

server {
    listen       80;
    server_name  localhost;

    location /nacos {
        proxy_pass http://nacos-cluster;
    }
}

而后在瀏覽器訪問:http://localhost/nacos即可。

代碼中application.yml文件配置如下:

spring:
  cloud:
    nacos:
      server-addr: localhost:80 # Nacos地址

4.6.優(yōu)化

  • 實際部署時,需要給做反向代理的nginx服務(wù)器設(shè)置一個域名,這樣后續(xù)如果有服務(wù)器遷移nacos的客戶端也無需更改配置.

  • Nacos的各個節(jié)點應該部署到多個不同服務(wù)器,做好容災和隔離文章來源地址http://www.zghlxwxcb.cn/news/detail-785062.html

到了這里,關(guān)于【Spring Cloud】深入理解 Nacos 的統(tǒng)一配置管理,配置熱更新,多環(huán)境配置共享,集群搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Spring Cloud】關(guān)于Nacos配置管理的詳解介紹

    【Spring Cloud】關(guān)于Nacos配置管理的詳解介紹

    ????歡迎來到我的CSDN主頁!???? ??我是Java方文山,一個在CSDN分享筆記的博主。???? ??推薦給大家我的專欄《Spring Cloud》。???? ??點擊這里,就可以查看我的主頁啦!???? Java方文山的個人主頁 ??如果感覺還不錯的話請給我點贊吧!???? ??期待你的加入,一起

    2024年02月01日
    瀏覽(64)
  • 【深入了解Spring Cloud Alibaba Nacos:服務(wù)注冊和配置中心】—— 每天一點小知識

    【深入了解Spring Cloud Alibaba Nacos:服務(wù)注冊和配置中心】—— 每天一點小知識

    ??????????????????????????????????????????????????????????? ?? 深入了解 S p r i n g C l o u d A l i b a b a N a c o s :服務(wù)注冊和配置中心 color{#FF1493}{深入了解Spring Cloud Alibaba Nacos:服務(wù)注冊和配置中心} 深入了解 Sp r in g Cl o u d A l ibaba N a cos :服務(wù)注

    2024年02月11日
    瀏覽(93)
  • 《Spring Cloud學習筆記:Nacos配置管理 & OpenFeign & LoadBalancer & Getway》

    《Spring Cloud學習筆記:Nacos配置管理 & OpenFeign & LoadBalancer & Getway》

    基于Feign的聲明式遠程調(diào)用(代碼更優(yōu)雅),用它來去代替我們之前的RestTemplate方式的遠程調(diào)用 首先我們來看一下,微服務(wù)架構(gòu)下關(guān)于配置文件的一些問題: 配置文件相對分散。在一個微服務(wù)架構(gòu)下,配置文件會隨著微服務(wù)的增多變的越來越多,而且分散在各個微服務(wù)中,不

    2024年02月04日
    瀏覽(51)
  • Spring Cloud Day2 Nacos配置管理、Feign遠程調(diào)用與Gateway服務(wù)網(wǎng)關(guān)

    Spring Cloud Day2 Nacos配置管理、Feign遠程調(diào)用與Gateway服務(wù)網(wǎng)關(guān)

    Nacos除了可以做注冊中心,同樣可以做配置管理來使用。 當微服務(wù)部署的實例越來越多,達到數(shù)十、數(shù)百時,逐個修改微服務(wù)配置就會讓人抓狂,而且很容易出錯。我們需要一種統(tǒng)一配置管理方案,可以集中管理所有實例的配置。 Nacos一方面可以將配置集中管理,另一方可以

    2024年02月10日
    瀏覽(21)
  • cloud Alibab+nacos+gateway集成swaggerui,統(tǒng)一文檔管理(注意點)

    cloud Alibab+nacos+gateway集成swaggerui,統(tǒng)一文檔管理(注意點)

    首先說明:本文只說整合注意點 效果圖和功能參考鏈接 在網(wǎng)關(guān)服務(wù)添加依賴即可解決 請注意排查:webflux的依賴是否有效。并且排除spring-boot-starter-web 注意查看gateway的相關(guān)配置是否有錯誤 原因:一定是你的依賴或者配置有問題 有問題請留言

    2024年02月13日
    瀏覽(19)
  • Spring Cloud集成Nacos實現(xiàn)本地配置優(yōu)先 | Spring Cloud 9

    Nacos Config Starter 實現(xiàn)了 org.springframework.cloud.bootstrap.config.PropertySourceLocator 接口,并將優(yōu)先級設(shè)置為最高。 在 Spring Cloud 應用啟動階段,會主動從 Nacos Server 端獲取對應的數(shù)據(jù),并將獲取到的數(shù)據(jù)轉(zhuǎn)換成 PropertySource 且注入到 Environment 的 PropertySources 屬性中,所以使用 @Value 注解

    2024年02月15日
    瀏覽(29)
  • Spring Cloud集成Nacos實現(xiàn)服務(wù)配置中心 | Spring Cloud 7

    先我們來看一下,微服務(wù)架構(gòu)下關(guān)于配置文件的一些問題: 配置文件相對分散。在一個微服務(wù)架構(gòu)下,配置文件會隨著微服務(wù)的增多變的越來越多,而且分散在各個微服務(wù)中,不好統(tǒng)一配置和管理。 配置文件無法區(qū)分環(huán)境,開發(fā)環(huán)境、測試環(huán)境、線上環(huán)境。微服務(wù)項目可能會

    2024年02月14日
    瀏覽(88)
  • 第十二章 Spring Cloud Config 統(tǒng)一配置中心詳解

    第十二章 Spring Cloud Config 統(tǒng)一配置中心詳解

    目錄 一、配置問題分析及解決方案 1、問題分析 2、解決方案 二、Spring Cloud Config 介紹 1、Spring Cloud Config特性 2、Spring Cloud Config作用???? 3、Spring Cloud Config 組件 ? ?統(tǒng)一配置中心服務(wù)端 ? ?統(tǒng)一配置中心客戶端 4、Spring Cloud Config 工作流程 三、 配置中心使用 1 搭建遠程 git

    2024年02月16日
    瀏覽(18)
  • 微服務(wù) – Spring Cloud – Nacos 配置中心

    Data ID : nacos-config-client-dev.yaml Group: DEV-CLOUD2023

    2024年02月11日
    瀏覽(91)
  • Spring Cloud Alibaba nacos配置中心

    Spring Cloud Alibaba nacos配置中心

    第一章 Java線程池技術(shù)應用 第二章 CountDownLatch和Semaphone的應用 第三章 Spring Cloud 簡介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 第九章 代碼管理gitlab 使用 第十章 Spr

    2024年02月08日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包