55張圖吃透Nacos,妹子都能看懂!


大家好,我是不才陳某~

這是《Spring Cloud 進階》第1篇文章,往期文章如下:

前言

Nacos是阿里巴巴開源的服務注冊中心以及配置中心,致力於給開發者提供一款便捷、簡單上手的開源框架。

Nacos究竟有什么驚人的地方呢?看下圖:

從上圖不難看出阿里巴巴的野心,一個Nacos干掉了Spring Cloud的三大組件,分別是注冊中心Eureka服務配置Config服務總線Bus

本文目錄結構如下圖:

為什么Nacos這么受歡迎?

Nacos官方文檔的介紹中有這么一句話,如下:

Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平台。 Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務范式、雲原生范式) 的服務基礎設施。

什么意思呢?不着急,有對比才有傷害。

EurekaConfig這兩個組件相信大家都用過,有什么感受?

當然,這兩個組件給我最直觀的感受就是繁瑣,原因如下:

  1. 無論是Eureka還是Config都必須自己搭建個服務
  2. 英文界面不是那么友好

用過Nacos的開發者都說很爽,不用自己搭建服務,阿里給你准備好了服務,只需要啟動即可;界面中英文都有,很適合初學者。

當然最重要的原因就是以上組件很可能面臨停更、比如Eureka已經停更了,誰知道后面其他的組件會不會如此呢?

如何自學呢?

對於初學者當然是官方文檔了,下面作者列出了Nacos相關的官方文檔:

當然很多人不願意看官方文檔,作者也在為大家准備了視頻教程。

公號碼猿技術專欄回復關鍵詞9527免費獲取。

本文版本說明

基於Maven構建的微服務項目,各個組件版本如下:

  • JDK1.8+
  • Spring Boot-2.2.2.RELEASE
  • SpringCloud-Hoxton.SR3
  • SpringCloud Alibaba-2.2.1.RELEASE

注意:Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本可不是隨便選擇的,官網明確規定了各個版本的適配:https://github.com/alibaba/spring-cloud-alibaba/wiki,如下圖:

不同版本的Alibaba也對應了不同組件的版本,如下圖:

一定要完全按照文檔給出的版本來選擇,不然會出現意想不到的BUG,那豈不是雞雞....

作者使用的是分模塊的聚合項目演示,其中dependencyManagement依賴如下,對應着上文提到的版本:

注意:如果你的版本的不是和作者一樣,請一定嚴格按照官方文檔給的版本進行適配,否則會有意想不到的BUG....

啟動Nacos服務

根據上面作者選擇的Spring Cloud Alibaba的版本,對應的Nacos版本是1.2.1,直接去GitHub(https://github.com/alibaba/nacos/tags)下載對應的版本即可,可以選擇windows或者Linux,如下圖:

下載完成之后直接解壓即可,從它的目錄結構和文件名稱一看這就是一個Spring Boot 項目。

進入/bin目錄,有兩個腳本,如下:

  • startup.cmd:windows平台的啟動腳本
  • startup.sh:Linux平台的啟動腳本

由於作者本地是windows,直接雙擊startup.cmd啟動項目,出現以下界面則啟動完成:

在瀏覽器輸入http://localhost:8848/nacos進入Nacos的登錄界面。

用戶名:nacos;密碼:nacos

登錄成功的界面如下:

服務注冊發現

微服務的服務注冊和發現相信都用過Eureka,要自己本地構建一個Eureka微服務,但是整合了Alibaba的Nacos則不用那么復雜,直接啟動Alibaba提供的Nacos服務即可,這樣讓程序員把全部精力放在業務上,下面是一個簡單的架構圖:

如何演示效果呢?

參照上面架構圖,作者分別創建了兩個模塊,分別是nacos-provider(服務提供者)、nacos-consumer(服務消費者),職責如下:

  • nacos-provider:注冊進入nacos-server,對外暴露服務
  • nacos-consumer:注冊進入nacos-server,調用nacos-provider的服務

nacos-provider服務提供者創建

由於使用了多模塊聚合項目,只需要創建一個nacos-provider模塊即可。步驟如下:

1. 添加Maven依賴

需要添加spring-cloud-starter-alibaba-nacos-discovery這個依賴,如下圖:

由於父模板中指定了spring-cloud-alibaba-dependencies的版本,子模塊中直接引入依賴即可,不需要指定版本號,這樣才能達到版本管理的效果。

2. 配置YML文件

在配置文件中指定服務名稱、端口號、nacos-server的地址等信息,如下:

server:
  port: 9001
spring:
  application:
    ## 指定服務名稱,在nacos中的名字
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # nacos的服務地址,nacos-server中IP地址:端口號
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        ## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯
        include: '*'

3. 開啟服務注冊發現功能

這個大部分Spring Boot功能模塊相同,都需要使用@EnableXxxx注解來開啟某個功能,否則無法引入自動配置。這里需要使用Spring Cloud的原生注解@EnableDiscoveryClient來開啟服務注冊發現的功能,如下:

4. 寫個演示服務

nacos-provider作為服務提供者注冊到nacos中,肯定需要提供個服務來供消費者(nacos-consumer)調用,下面是隨便寫的一個接口:

5. 啟動項目

按照上面的5個步驟算是完成了最基本的一個服務,現在只需要啟動nacos-provider這個服務即可。

啟動成功之后在nacos的服務管理->服務列表這里將會發現注冊進入的nacos-provider這個服務,如下圖:

OK,在nacos中能夠看到服務注冊成功了,完成任務..........

nacos-consumer服務消費者創建

同樣是注冊進入nacos,因此大致步驟都是一樣的,步驟如下:

1. 添加Maven依賴

需要添加spring-cloud-starter-alibaba-nacos-discovery這個依賴,如下圖:

2. 配置YML文件

同樣是指定服務名、端口、nacos-server的地址,如下:

server:
  port: 9002
spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        # nacos的服務地址
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        ## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯
        include: '*'

3. 開啟服務注冊發現功能

使用@EnableDiscoveryClient標注,如下圖:

4. 寫個演示服務

如何演示呢?nacos-provider提供了一個服務,那么我們就調用它的服務來演示一把。

其實Nacos集成了Ribbon,何以見得呢?打開spring-cloud-starter-alibaba-nacos-discovery的依賴一看便知,如下圖:

因此我們便能使用Ribbon的負載均衡來調用服務,步驟如下:

  • 創建RestTemplate,使用@LoadBalanced注解標注開啟負載均衡,如下圖:

  • 直接使用注冊到nacos的中的服務名作為訪問地址調用服務,如下圖:

  • 上圖中的serviceUrl是什么東西呢?難道是IP地址?當然不是,既然nacos-provider和nacos-consumer都已經注冊到nacos中,那么可能是可以直接通過服務名直接找到對應得服務,因此這個serviceUrl=http://service-name,如下圖:

OK,至此nacos-consumer已經准備完成,下面就可以啟動項目。

5. 啟動項目

啟動成功之后將會在nacos中的服務列表中查看到兩個服務,分別是nacos-provider、nacos-consumer,如下圖:

此時服務提供者和消費者都已成功注冊到Nacos,那么接下來就是測試服務能否調的通的問題了。

直接調用nacos-consumer的接口,輸入地址:http://localhost:9002/nacos/test/16,返回信息如下圖則表示相互調用成功:

總結

Nacos的服務注冊發現很簡單,比Eureka簡單多了,無需自己構建個注冊中心。

啟動配置管理

為什么要用配置管理?其實這已經不僅僅是微服務的痛點了,單體服務也存在這樣的痛點。試問線上的項目如果想要的修改某個配置,比如添加一個數據源,難道要停服更新?顯然是不太現實,那么如何解決呢?

對於單體應用前面已經寫過一篇文章,感興趣的可以看:如何讓Spring Boot 的配置 "動" 起來?

微服務環境下可選的方案還是很多的,比如Config+BUS,攜程開源的Apollo....

這都不是今天的重點,用過Config+BUS覺得怎么樣?自己要搭建一個Config微服務,還要集成GitHub等,你不難受嗎?

下面就來介紹一下Nacos是如何完美的實現配置管理以及動態刷新的。

如何演示效果呢?

新建一個模塊nacos-config用來整合Nacos實現配置管理,項目結構如下:

Nacos配置列表在哪里能看到呢?在管理平台->配置管理->配置列表這一欄,如下圖:

添加依賴

由於使用了模塊聚合的工程,因此不需要指定版本號,依賴如下:

<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

配置YAML文件

bootstrap.yml文件中設置Nacos的配置,如下:

spring:
  application:
    name: nacos-config
    ## 當前環境,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        ## nacos的地址,作為配置中心
        server-addr: 127.0.0.1:8848
        ## 配置內容的數據格式,目前只支持 properties 和 yaml 類型,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}
        file-extension: properties
management:
  endpoints:
    web:
      exposure:
        ## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯
        include: '*'

Data ID是什么?

dataId是一個配置的唯一標識,怎么取值呢?格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix:前綴,默認是spring.application.name的值,也可以通過配置項 spring.cloud.nacos.config.prefix來配置。
  • spring.profiles.active: 即為當前環境對應的 profile。當 spring.profiles.active 為空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}
  • file-exetension 為配置內容的數據格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 propertiesyaml 類型。

添加一個配置

下面在nacos中添加一個config.version的配置,如下圖:

以上就是添加的config.version的配置,發布之后查看列表如下圖:

獲取nacos中的配置

獲取nacos中的配置很簡單,使用原生注解@Value()直接讀取即可,步驟如下:

  • 新建一個實體類DynamicConfigEntity
@Component
@Data
public class DynamicConfigEntity {

    //直接讀取nacos中config.version的配置
    @Value("${config.version}")
    private String version;
}
  • 新建一個controller測試,如下:
@RestController
@RequestMapping("/nacos")
public class NacosController {

    @Autowired
    private DynamicConfigEntity entity;


    @GetMapping("/test/{id}")
    public String test(@PathVariable("id")Integer id){
        return "accept one msg id="+id+"----- version="+entity.getVersion();
    }
}

運行項目成功后,在瀏覽器輸入地址:http://localhost:9003/nacos/test/1,返回如下結果:

結果很明顯,Nacos中的配置生效了,是不是很簡單?

配置如何動態刷新?

設想一下:現在由於需求改變了,我需要將config.version這個配置改成2,那么我直接改變Nacos中的配置會生效嗎?

不妨試一下,直接將Nacos中的配置修改成2,如下圖:

此時我們再不重啟項目的情況下訪問:http://localhost:9003/nacos/test/1,結果如下圖:

what???怎么沒變呢?不是說Nacos可以自動刷新配置嗎?

其實想要Nacos自動刷新配置還需要結合原生注解@RefreshScope,這個注解是不是很眼熟,在Config中也是用這個注解刷新配置,我們只需要將該注解標注在配置的實體類上即可,如下:

@Component
@RefreshScope
@Data
public class DynamicConfigEntity {

    //直接讀取nacos中config.version的配置
    @Value("${config.version}")
    private String version;
}

此時加上@RefreshScope重啟之后將Nacos中config.version這個配置改成3,然后訪問http://localhost:9003/nacos/test/1,結果如下圖:

多環境如何隔離配置?(Namespace)

試想一下:正常的業務開發至少有三個環境吧,如下:

  • dev:本地開發環境
  • test:測試環境
  • prod:生產環境

那么每個環境的配置肯定是不同的,那么問題來了,如何將以上三種不同的配置在Nacos能夠很明顯的區分呢?

很多人可能會問:DataId格式中不是有環境的區分嗎?這個不是可以滿足嗎?

DataId當然能夠區分,但是微服務配置可不止這幾個啊?一旦多了你怎么查找呢?多種環境的配置雜糅到一起,你好辨別嗎?

當然阿里巴巴的Nacos開發團隊顯然考慮到了這種問題,官方推薦用命名空間(namespace)來解決環境配置隔離的問題。

Namespace(命名空間):解決多環境及多租戶數據的隔離問題
在多套不同的環境下,可以根據指定的環境創建不同的Namespace,實現多環境的數據隔離

Nacos中默認提供的命名空間則是public,上述我們創建的config.version這個配置就屬於public這個命名空間,如下圖:

當然我們可以根據業務需要創建自己的命名空間,操作如下圖:

陳某創建了三個,分別是dev、test、prod,如下圖:

注意:上圖中的 命名空間ID是系統自動生成的唯一ID,后續指定不同的Namespace就用這個ID。

創建完成之后,在配置列表上方則可以看見不同的命名空間,如下圖:

既然Nacos中的Namespace配置好了,那么微服務中如何配置呢?前面也說過,Nacos默認指定的命名空間是public,那么如何在項目中指定命名空間呢?

其實很簡單,假設在test這個命名空間中添加一個config.version=4,如下圖:

此時只需要在bootstrap.yml配置中指定如下配置:

spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
      ## namespace的取值是命名空間ID,這里取的是test命名空間ID
        namespace: d0ffeec2-3deb-4540-9664-fdd77461fd6b

注意:Namespace必須在bootstrap.yml配置文件中指定,否則不生效。

至此,已經全部配置完畢,啟動項目,瀏覽器訪問http://localhost:9003/nacos/test/1,結果如下圖:

不同業務配置如何隔離?(Group)

試想以下場景:有兩個微服務,一個是訂單系統,一個是用戶系統,但是他們有着相同的配置,比如datasource-url,那么如何區分呢?

此時Group就派上用場了,顧名思義Group是分組的意思。

Group:Nacos 中的一組配置集,是組織配置的維度之一,簡單的說則是不同的系統或微服務的配置文件可以放在一個組里。Nacos如果不指定Group,則默認的分組是DEFAULT_GROUP。

上述場景中訂單系統、用戶系統可以單獨分為一個組,比如ORDER_GROUPUSER_GROUP。當然這是比較細粒度的分組,根據企業的業務也可以多個微服務分為一組。

下面在Nacos中新建一個config.version=5,命名空間為test,分組為ORDER_GROUP,如下圖:

此時命名空間test中的配置如下圖:

bootstrap.yml配置文件中指定分組,配置如下:

spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
        ## 指定命名空間
        namespace: d0ffeec2-3deb-4540-9664-fdd77461fd6b
        ## 指定分組為ORDER_GROUP
        group: ORDER_GROUP

注意:Group配置和Namespace一樣,要在bootstrap.yml文件中配置。

至此,已經全部配置完畢,啟動項目,瀏覽器訪問http://localhost:9003/nacos/test/1,結果如下圖:

總結

Nacos實現配置管理和動態配置刷新很簡單,總結如下步驟:

  1. 添加對應spring-cloud-starter-alibaba-nacos-config依賴
  2. 使用原生注解@Value()導入配置
  3. 使用原生注解@RefreshScope刷新配置
  4. 根據自己業務場景做好多環境配置隔離(Namespace)、不同業務配置隔離(Group)
  5. 切記:命名空間和分組的配置一定要放在bootstrap.yml或者bootstrap.properties配置文件中

Nacos如何共享配置?

場景:一個項目的微服務數量逐漸增多,勢必會有相同的配置,那么我們可以將相同的配置抽取出來作為項目中共有的配置,比如集群中的數據源信息..

Nacos的共享配置能夠完美的解決上述問題,配置起來也是很簡單,沒辦法,就是這么強大。

Nacos中新建共享配置

陳某這里演示兩個共享配置,DataId分別是share-config1.propertiesshare-config2.properties,如下圖:

注意:DataId一定要帶有后綴properties或者yml

share-config1.properties配置中的內容如下:

database.url=jdbc:mysql://112.111.0.135:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

share-config2.properties配置中的內容如下:

database.user=root

新建模塊nacos-config-share

此處新建一個模塊nacos-config-share來演示效果,依賴同nacos-config

bootstrap.yml配置如下:

spring:
  application:
    name: nacos-config-share
  cloud:
    nacos:
      config:
        ## 指定命名空間
        namespace: 51f0479b-a88d-4646-902b-f2a063801502
        ## nacos的地址,作為配置中心
        server-addr: 127.0.0.1:8848
        ## 配置內容的數據格式,目前只支持 properties 和 yaml 類型,這個和dataId有關-> ${prefix}-${spring.profiles.active}.${file-extension}
        file-extension: properties
management:
  endpoints:
    web:
      exposure:
        ## yml文件中存在特殊字符,必須用單引號包含,否則啟動報錯
        include: '*'

以上的配置和nacos-config差不多,指定application.name、命名空間、file-extension、nacos服務地址....

當然除了以上配置肯定是不夠的,要想共享配置還需要添加以下配置:

spring:
  application:
    name: nacos-config-share
  cloud:
    nacos:
      config:
        ## 共享配置,List集合,可以配置多個
        shared-configs:
          ## dataId:配置文件的dataId,必須帶有后綴
          - dataId: share-config1.properties
          ## refresh:指定是否能夠動態刷新,默認是false
            refresh: true
          - dataId: share-config2.properties
          ## 指定配置文件的分組,默認是DEFAULT_GROUP
            group: ORDER_GROUP
            refresh: true

想要看到效果,肯定是需要通過@Value()導入配置,如下:

@Component
@RefreshScope
@Data
public class DynamicConfigEntity {
    //獲取共享配置文件中database.url
    @Value("${database.url}")
    private String databaseUrl;

    //獲取共享配置文件中database.user
    @Value("${database.user}")
    private String user;
}

上面配置完畢,啟動nacos-config-share這個項目,訪問:http://localhost:9003/nacos/test/1,結果如下圖:

動態刷新配置這里就不再演示了,自己動手玩一下......

Nacos如何持久化?

前面講了這么多,大家有沒有思考過一個問題,Nacos的一系列的配置究竟存儲在哪里呢?

其實Nacos默認使用的是內嵌的數據庫Derby,這個在Nacos-server文件下的/data目錄下就可以驗證,如下圖:

那么問題來了,這些配置如何用自己的數據庫存儲呢?

目前Nacos僅支持Mysql數據庫,且版本要求:5.6.5+

初始化數據庫

首先在Mysql中新建一個數據庫nacos-config(名稱隨意),然后執行Nacos中的SQL腳本,該腳本是Nacos-server文件夾中的nacos-mysql.sql,如下圖:

執行該腳本,將會自動創建表,如下圖:

修改配置文件

Nacos-server也是一個Spring Boot 項目,想要連接自己的數據庫,當然要配置數據源了,那么在哪里配置呢?

配置文件同樣在Nacos-server中的conf目錄下,如下圖:

只需要將application.properties中的Mysql配置取消注釋並且配置好自己的數據源即可,如下圖:

修改完畢,重新啟動Nacos-server。

如何驗證是否持久化呢?很簡單,只需要創建一個配置,然后在his_config_info表中查看下是否存在即可,如下圖:

Nacos集群如何搭建?

真是夠了,又來扯皮高可用了,真是頭大..........

Nacos推薦集群模式部署,這樣可以避免單點故障,那么如何搭建集群呢?請看官方文檔:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

話不多說,偷一張官網的架構圖,如下:

上圖什么意思呢?說實話,這文檔寫的真不咋的,很多除初學者一看就懵,請看陳某的架構圖,如下:

看了陳某畫的圖是不是更清楚了呢?請求進來先共同Nginx集群進行轉發到Nacos集群中,當然為了保持高可用,數據庫必須也是集群模式。

Nacos官方推薦Linux下搭建集群模式,因此陳某嘗試在Linux環境下搭建。Nginx和Mysql這里集群就不再演示如何搭建了,不是今天的重點,主要演示下Nacos集群的搭建方法。

下載Linux下的Nacos

在GitHub上下載自己對應的版本,陳某用的版本是1.2.1,地址:https://github.com/alibaba/nacos/releases/tag/1.2.1

找到后綴為tar.gz的文件下載,如下圖:

修改配置文件

由於條件限制,陳某僅僅在一台服務器上啟動三個Nacos服務演示。Nacos的端口分別為8848、8849、8850。

修改端口號

Nacos默認的端口號是8848,那么如何修改端口呢?只需要修改conf目錄下的application.properties中的server.port即可,如下圖:

修改集群配置

那么如何配置集群呢?在conf目錄下有一個cluster.conf.example文件,如下圖:

只需要將cluster.conf.example這個文件復制一份為cluster.conf放在conf目錄下,其中配置的內容如下:

172.16.1.84:8848
172.16.1.84:8849
172.16.1.84:8850

什么意思呢?172.16.1.84是服務器的IP地址,這里填寫自己服務器的IP,:后面的是Nacos的端口號。

修改數據源

這個在持久化的那里已經講過了,只需要將application.properties中的數據源替換掉,如下圖:

啟動Nacos

經過上述的步驟Nacos集群已經配置好了,現在分別啟動Nacos,命令如下:

bash -f ./startup.sh

啟動成功,訪問任意一個端口的Nacos服務,在集群管理->節點列表中將會看到自己搭建的三個節點,如下圖:

至此,Nacos集群算是搭建完成了......

Nginx中配置

此處就不演示Nginx集群搭建了,直接在單機的Nginx中配置。直接修改nginx的conf文件,內容如下:

upstream nacos{
		server 172.16.1.84:8848;
		server 172.16.1.84:8849;
		server 172.16.1.84:8850;
	 }
	 
	 server{
		listen 80;
		location / {
			proxy_pass http://nacos;
		}
	 }

相信大家都能看懂,此處就不再做過多解釋了.....配置完成后,啟動Nginx,直接訪問:http://ip/nacos。

項目中配置server-addr

既然搭建了集群,那么項目中也要配置一下,有兩種方式,下面分別介紹。

第一種:通過直連的方式配置,如下:

spring:
  application:
    ## 指定服務名稱,在nacos中的名字
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # nacos的服務地址,nacos-server中IP地址:端口號
        server-addr: 172.16.1.84:8848,172.16.1.84:8849,172.16.1.84:8850

第二種:直接連接Nginx,如下:

spring:
  application:
    ## 指定服務名稱,在nacos中的名字
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # nacos的服務地址,nacos-server中IP地址:端口號
        server-addr: 172.16.1.84:80

總結

Nacos集群搭建非常簡單,唯一的配置就是cluster.conf中設置三個Nacos服務,這也正是Nacos的設計理念,讓開發者能夠盡快上手,專注業務的開發。

Nacos是CP還是AP?

先來簡單復習下CAP的概念吧,如下:

  • 一致性(C):在分布式系統中的所有數據備份,在同一時刻是否同樣的值。(等同於所有節點訪問同一份最新的數據副本)
  • 可用性(A):在集群中一部分節點故障后,集群整體是否還能響應客戶端的讀寫請求。(對數據更新具備高可用性)
  • 分區容錯性(P):以實際效果而言,分區相當於對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味着發生了分區的情況,必須就當前操作在C和A之間做出選擇。

一般分布式系統中,肯定是優先保證P,剩下的就是C和A的取舍。

當然不同的注冊中心遵循的CAP也是不同的,如下:

  • Zookeeper:保證CP,放棄可用性;一旦zookeeper集群中master節點宕了,則會重新選舉leader,這個過程可能非常漫長,在這過程中服務不可用。
  • Eureka:保證AP,放棄一致性;Eureka集群中的各個節點都是平等的,一旦某個節點宕了,其他節點正常服務(一旦客戶端發現注冊失敗,則將會連接集群中其他節點),雖然保證了可用性,但是每個節點的數據可能不是最新的。
  • Nacos:同時支持CP和AP,默認是AP,可以切換;AP模式下以臨時實例注冊,CP模式下服務永久實例注冊。

寫在最后

Spring Cloud 進階這個專欄已經蘊量很久了,前段時間一直忙着工作,鐵粉都知道陳某已經完成了兩個專欄文章,分別是Spring Boot 進階、Mybatis 進階;總之原創不易,且看且珍惜,隨手一個贊是美德哦!!!

以上源碼已經上傳GitHub,需要的公號回復關鍵詞9528獲取。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM