簡介
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
項目地址
關於項目的地址,有興趣的可以自行下載
git@gitee.com:anxc/study-demo.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