1. 程式人生 > 實用技巧 >SpringCloud 系列之 nacos

SpringCloud 系列之 nacos

簡介

nacos簡單來說就是一個服務註冊和配置中心,我們可以像使用其它註冊中心一樣使用它,它也可以當作配置中心,可以實現SpringCloud Config和SpringCloud Bus 一樣的功能,可以實現線上的專案資訊配置。本文主要講述其作為註冊中心和配置中心的快速上手的用法。

使用

使用說明

本文是在windows環境下進行並使用的,讀者也可以根據自己的需要在Linux下單獨部署或者使用docker進行部署,不過docker下或者Linux下需要對其進行相應的修改,還要注意對應的埠安全組是否開放,叢集版的話,資料儲存配置是否正常,Linux記憶體是否夠用,因為叢集版會發生反覆重啟的現象,有興趣的可以自己去研究一下。本文是單機windows下進行部署的,其實叢集版也不是很複雜,不過存留的bug比較多,就不做了,因為環境不同,我這可能正常你那裡可能就不行了。

下載並啟動

由於官網說1.3.1比較穩定,我就下載了1.3.1版本的(Linux下我用的是0.9的)

https://github.com/alibaba/nacos/releases/tag/1.3.1

這裡我選擇的是windows版的1.3.1.zip 讀者可自行選擇

然後下載完成以後,我們需要對其減壓,然後進行配置資訊的修改:

  • 資料持久化
  • 單機版叢集版的選擇

資料持久化

開啟壓縮包,然後進行到conf資料夾下,我們找到如圖這兩個檔案:
如果想要資料持久儲存,配置檔案的資訊下一次還想要使用的話,我們可以進行資料庫配置,如果不想,請忽略資料持久化配置

在MySQL資料庫中,根據nacos-mysql.sql 中資訊,建立對應的資料庫及表,然後進入到 application.properties 檔案中進行資料庫配置:
去掉對應的註釋並新增資料庫資訊。

### Count of DB:
 db.num=1

### Connect URL of DB:
 db.url.0=jdbc:mysql://你的資料庫連線資訊:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
 db.user=root
 db.password=123456

單機版叢集版的選擇

進入到bin 資料夾下,找到startup.cmd 並進行編輯,單例預設不用修改,看一下就行,叢集需要對截圖紅色部分進行對應的修改:


啟動

雙擊 bin/startuo.cmd 檔案進行啟動。

訪問

輸入網址進行訪問(賬號密碼都為nacos),如果你進行了對應的修改,請輸入你修改後的檔案

http://localhost:8848/nacos/

配置中心的用法

首先建立一個Springcloud專案 springcloud-nacos-config-demo,並引入依賴pom:

(由於有父pom來做版本管理,所以這裡沒有寫版本,詳情請在專案地址中檢視)

<dependencies>
        <!--SpringCloud Alibaba nacos 註冊中心-->
        <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>
        <!--常用的web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring boot 的健康檢測-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
</dependencies>

編寫配置檔案application.yml

server:
  port: 3377
spring:
  profiles:
    active: devs
  application:
    name: springcloud-nacos-config-demo
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服務註冊中心地址
      config:
        server-addr: localhost:8848 #Nacos作為配置中心地址
        file-extension: yaml #指定yaml格式配置
        group: DEVS_GROUP
        namespace: ba55d245-23bd-4244-ae2e-6392f30a2945

啟動類加註解

@EnableDiscoveryClient

編寫用例去獲取在nacos中的配置:

@RestController
@RefreshScope //支援Nacos的動態重新整理功能。
public class DemoController {

    @Value("${myserver.name}")
    private String name;

    /**
     * 獲取 nacos 中的配置資訊
     * @return
     */
    @GetMapping("getConfigInfo")
    public String getConfigInfo(){
        return name;
    }
}

nacos編寫配置檔案

配置檔案的對映關係

啟動專案進行訪問

http://localhost:3377/getConfigInfo

可以看到已經獲取到值了

服務註冊

建立一個springboot專案 springcloud-nacos-client-a,並且匯入pom:

        <!--SpringCloud Alibaba nacos 註冊中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--常用的web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring boot 的健康檢測-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--熱載入外掛,可不加-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--日誌外掛,可不加-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--test外掛,可不加-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.4</version>
        </dependency>

新增application.yml配置檔案

server:
  port: 7777

spring:
  application:
    name: springcloud-nacos-client-a
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #配置的Nacos地址(本機的寫localhost:8848,伺服器的寫IP地址)

management:
  endpoints:
    web:
      exposure:
        include: '*'

啟動類加註解

@EnableDiscoveryClient

新增服務呼叫ribbon 的配置

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced    //ribbon 服務呼叫
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

編寫測試用例

@RestController
public class UserController {

    public static final String URL="http://springcloud-nacos-client-b";
    @Value("${server.port}")
    private String serverPort;
    @Value("${spring.application.name}")
    private String serverName;

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/getServerInfo/{name}")
    public String getServerInfo(@PathVariable("name")String name){
        String result ="服務名:"+serverName+" 埠:"+serverPort+" 時間戳:"+ DateUtil.now()+"\n";
        if("a".equals(name)){
            return result;
        }else {
            return result+ "實際請求地址:"+restTemplate.getForObject(URL+"/getServerInfo/"+name,String.class);
        }

    }
}

仿照 springcloud-nacos-client-a 建立springcloud-nacos-client-b ,並修改其對應的配置檔案和埠號

啟動nacos服務,springcloud-nacos-client-a 和springcloud-nacos-client-b

在nacos 的服務列表,我們可以看到我們註冊的服務:

服務呼叫

a 呼叫 a

a 呼叫 b

b 呼叫 a

b 呼叫 b

專案地址

關於專案的地址,有興趣的可以自行下載
[email protected]:anxc/study-demo-eureka.git

參考文件:

https://nacos.io/zh-cn/docs/quick-start.html

https://www.cnblogs.com/gchh/p/13724416.html
https://www.freesion.com/article/7939864046/
https://www.pianshen.com/article/25711907017/
https://www.pianshen.com/article/2236929088/
https://blog.csdn.net/qq_20667511/article/details/107378047