SpringCloud Alibaba Nacos---服務注冊與配置中心


  前言:不斷學習就是程序員的宿命

  中文:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

  官網:https://spring.io/projects/spring-cloud-alibaba

  英文版:https://github.com/alibaba/spring-cloud-alibaba

  分支主題:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

一、Nacos

  官網:https://nacos.io/zh-cn/

  一個更易於構建原生應用的動態服務發現、配置管理和服務管理平台。Nacos=注冊中心+配置中心=Eureka+Config+Bus

  下載地址:https://github.com/alibaba/nacos/releases

  https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

二、Nacos作為服務注冊中心

  啟動Nacos:/bin/startup.cmd啟動Nacos,http://localhost:8848/,默認用戶名與密碼為nacos

1、Provider注冊至Nacos

1.1、pom

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
pom

1.2、application.yml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

management:
  endpoints:
    web:
      exposure:
        include: "*"
View Code

1.3、啟動類

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class, args);
    }
}
啟動類

1.4、測試

  啟動模塊cloudalibaba-provider-payment9001,查看Nacos,服務已注冊至Nacos

2、Consumer注冊至Nacos

2.1、pom

 <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xd.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
pom

2.2、application.yml

server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

#消費者將要去訪問的微服務名稱(注冊成功進nacos的微服務提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider
application.yml

2.3、測試

3、Nacos天生支持負載均衡

4、Nacos服務發現實例模型

5、Nacos的AP與CP模式切換

  C是所有節點在同一時間看到的數據是一致的;A是所有的請求都會收到響應。何時選擇使用何種模式? 

  ①一般來說,如果不需要存儲服務級別的信息且服務實例是通過Nacos-client注冊,並能夠保持心跳上報,那么就可以選擇AP模式。當前主流服務如Dubbo、SpringCloud都適合Ap模式,AP模式為了服務的可能性而減弱了一致性,因此AP模式下只能注冊臨時實例

  ②如果需要在服務級別編輯或存儲配置信息,那么CP是必須,K8S服務和DNS服務則適用於CP服務,CP模式下則支持注冊持久化實例,此時則是以Raft協議為集群運行模式,該模式下注冊實例之前必須先注冊服務,如果服務不存在,則會返回錯誤。

  切換:curl -X PUT `$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

三、Nacos作為服務配置中心

  官網:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

1、Nacos基礎配置

1.1、Nacos中的DataId的組成格式與SpringBoot配置文件中的匹配規則 

 

 1.2、測試

  測試前保證nacos客戶端-配置管理-配置管理欄下游對應的yaml配置文件

2、Nacos分類配置(高級)

2.1命名空間、分組、DataID之間關系

Nacos 數據模型 Key 由三元組唯一確定, Namespace默認是空串,公共命名空間(public),分組默認是 DEFAULT_GROUP。

(1)NameSpace

  Nacos默認的命名空間是public、NameSpace主要用來隔離,比如我們現在有3個開發環境:開發、測試、生產環境,我們就可以創建3個NameSpace,不同的NameSpace之間是隔離的。

(2)Group

  默認是DEFAULT_GROUP,Group可以把不同的微服務划分到同一個分組里面去。

(3)Service

  Service就是微服務,一個Service可以包含多個Cluster(集群),Nacos默認Cluster是DEFAULT,Cluster是對指定的微服務一個虛擬划分。

  比如說為了容災,將Service微服務分別部署在了杭州機房和廣州機房,這時就可以給杭州機房的Service微服務起一個集群名稱(HZ),廣州機房微服務集群名稱(GZ),還可以盡量讓同一個機房的微服務相互調用,以提升性能。

(4)Instance

  就是微服務實例 

3、三種方案加載配置

DataID方案指定spring.profile.active和配置文件的DataID來使不同環境下讀取不同的配置:默認空間+默認分組+新建dev和test兩個DataId

  通過spring.profile.active屬性就能進行多環境下配置文件的讀取

Group方案:通過Group實現環境區分

Namespace方案:NameSpace+Group+profile區分

3.1DataID方案

3.2Group方案

3.3NameSpace方案

四、Nacos集群與持久化配置 

  參考:Linux下Nacos集群與持久化配置


免責聲明!

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



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