Nacos作為微服務注冊中心,愛不釋手的感覺


我覺得Nacos用起來還不錯

在使用SpringCloud做分布式微服務架構時,注冊中心是必不可少的一個組件。目前可以用的主要有:Eureka、Consul、Zookeeper。今天,我們就來說一下Alibaba的Nacos怎么樣?

下載與安裝

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

  • 安裝:

    • Windows 下載解壓后(.zip),直接點擊bin/start.bat就可以了。
    • Linux下載解壓后(.tar.gz),同樣,也是運行 bin/start.sh 腳本。
  • 打開控制台:

    Nacos提供了一個可視化的操作平台,安裝好之后,在瀏覽器中輸入http://localhost:8848就可以訪問了,默認的用戶名和密碼都是nacos(我使用的1.2.0版本。默認將密碼驗證給關了,這個選項后邊會說)

    Nacos注冊中心

Nacos簡介

Nacos是由阿里巴巴開源的一個好東西,直接貼上它的官網,就不再這么累贅了,畢竟是國人開發的,是有中文文檔的,上邊寫的很全面。https://nacos.io/zh-cn/docs/quick-start.html

Nacos作為注冊中心

​ 它和Eureka不一樣,並不需要創建新的web項目,而是和Zookeeper和Consul一樣,只需要下載安裝啟動后,將我們的微服務注冊進去就可以了。

​ 創建兩個微服務,一個客戶端(調用者)和一個服務端(提供者),

  • 引入依賴
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 在它們的配置文件中引入如下代碼:
spring:
  cloud:
    nacos:
      discovery:
      # Nacos的地址
        server-addr: localhost:8848
  • 主啟動類上添加(不管是哪種注冊中心,這個一定要有):
@EnableDiscoveryClient
  • 當然,在客戶端還是要添加ribbon的負載均衡的,但是不用額外添加依賴,nacos已經添加了
@Configuration
public class AppConfig {
    
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
  • 好了,打開Nacos的控制台,然后就可以看到這兩個微服務了。

Nacos注冊中心

Nacos作為分布式配置中心

之前我們是使用SpringCloudConfig從github等倉庫上拉取的配置文件,但是用了Nacos后,我們就可以從Nacos中直接配置了,是不是很方便啊。新建了一個項目,nacos-config-server-8002

pom.xml引入下邊依賴

<!--分布式配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

application.yml中加入如下配置內容

spring:
  profiles:
    active: dev

添加一個bootstrap.yml

server:
  port: 8002
spring:
  application:
    name: nacos-config-server-8002
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
#       配置文件類型,有yaml和properties ,注意一定是yaml,不是yml
        file-extension: yaml
  1. application.yml中的配置是什么意思?
  1. 為什么要引入bootstrap.yml?

​ 簡單來說,這個配置是和application.yml是一樣的,不這它要比appliation.yml先加載

Controller中的接口

@RestController
@RefreshScope //這是一個SpingCloud的原生注解,可以實現配置的動態刷新
public class InfoController {
    /*
    這個中的 : 的意思就是說,如果配置文件中沒有,就直接使用后邊的那個字符串,我寫的是nothing
    在本地項目中,我們並沒有配置configInfo,
    所以如果這時候調用http://localhost:8002/info
    返回就是nothing
     */
    @Value("${configInfo}")
    private String configInfo;

    /**
     * 用做配置中心的演示
     *
     * @return
     */
    @GetMapping("info")
    public String getConfig() {
        return configInfo;
    }
}

Nacos中的幾個空間概念:

  • NameSpaces(命名空間)

    相當於我們一個項目中的包名,Nacos中可以新建多個命名空間。微服務注冊的時候,可以通過配置spring.cloud.nacos.discovery.namespace,當然,配置文件也可以配置namespace來指定對應的名稱空間,如果不配置就是使用默認的public 空間。

    假如,你是好幾個項目共用一個Nacos集群,就可以通過namespce來區分項目。

    在Nacos的控制台的最下邊有一個命名空間,你可以新建一個試,建完再次點擊服務列表和配置列表上邊會出現你的命令空間選擇(如下圖,我新建了一個space1的空間,public是默認的)

Nacos注冊中心

  • Group(分組)

    相當於Java中的類名,同樣,一個包下可以有多個類。不過這個只是相對於配置文件來說,對於服務注冊沒有這么一說。它有一個默認的分組就是DEFAULT_GROUP,在新建配置文件時就會有(如下圖)

  • DataID

    這個就相當於類中的方法,同樣,一個類中就會有多個方法名。

Nacos注冊中心

​ 我們的配置文件就是在上圖中去添加的,下邊是我截取了Nacos官方文檔中對於DataID的說明:

Nacos注冊中心

新建一個配置文件試試

​ 在配置列表中新建一個配置文件,如果你有多個命名空間,注意選擇你的項目中連接的那個

Nacos注冊中心

只要點了右下角的發布,就會自動配置了,再次訪問http://localhost:8002/info,就會看到已經更改了,這個是實時更改的。

這些都是很簡單的操作,只要你自己做一次,就一定會使用了

Nacos的配置文件持久化

Nacos使用的是嵌入式數據庫Derby,有關嵌入式數據庫,可以參考在Spring中使用嵌入式數據庫-H2,雖然數據庫不同,但是原理操作方法一致。但是,我們想換成我們的mysql用來存儲nacos的數據,可否?

  • 導入數據到你本地的Mysql庫

    在Nacos安裝包下的conf目錄下有個nacos-mysql.sql文件,放到你的Mysql工具中執行一遍(它這個sql語句中建庫,先建個庫名叫nacos_config)

  • 修改conf下的application.properties文件

### 98行左右,這個設置為true就是開啟nacos啟動的登錄驗證,默認用戶名和密碼就是nacos
nacos.core.auth.enabled=true

### 在最后添加如下:
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123

​ 以上這些內容全都來自於Nacos官網

Nacos注冊中心

這樣,再次啟動后Nacos后,你之前的配置文件就全都不見了,因為你配置了Mysql庫。這樣,你每次修改后,就會進Mysql庫,這個庫很簡單的,你大概看一下就能明白了。

微信關注”小魚與Java“,回復”SpingCloud“獲取更多SpringCloud學習資料

Nacos


免責聲明!

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



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