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.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章