SpringCloud 系列之 nacos
簡介
nacos簡單來說就是一個服務註冊和配置中心,我們可以像使用其它註冊中心一樣使用它,它也可以當作配置中心,可以實現SpringCloud Config和SpringCloud Bus 一樣的功能,可以實現線上的專案資訊配置。本文主要講述其作為註冊中心和配置中心的快速上手的用法。
使用
使用說明
本文是在windows環境下進行並使用的,讀者也可以根據自己的需要在Linux下單獨部署或者使用docker進行部署,不過docker下或者Linux下需要對其進行相應的修改,還要注意對應的埠安全組是否開放,叢集版的話,資料儲存配置是否正常,Linux記憶體是否夠用,因為叢集版會發生反覆重啟的現象,有興趣的可以自己去研究一下。本文是單機windows下進行部署的,其實叢集版也不是很複雜,不過存留的bug比較多,就不做了,因為環境不同,我這可能正常你那裡可能就不行了。
下載並啟動
由於官網說1.3.1比較穩定,我就下載了1.3.1版本的(Linux下我用的是0.9的)
這裡我選擇的是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),如果你進行了對應的修改,請輸入你修改後的檔案
配置中心的用法
首先建立一個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編寫配置檔案
配置檔案的對映關係
啟動專案進行訪問
可以看到已經獲取到值了
服務註冊
建立一個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://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