Nacos Server部署配置全過程
1.什么是Nacos?
官方簡(jiǎn)介:一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)(Nacos Discovery )、服務(wù)配置(Nacos Config)和服務(wù)管理平臺(tái)。
Nacos的關(guān)鍵特性包括:
- 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測(cè)
- 動(dòng)態(tài)配置服務(wù)
- 動(dòng)態(tài)DNS服務(wù)
- 服務(wù)及其元數(shù)據(jù)管理
Nacos的核心功能:
服務(wù)注冊(cè):Nacos Client會(huì)通過發(fā)送REST請(qǐng)求的方式向Nacos Server注冊(cè)自己的服務(wù),提供自身的元數(shù)據(jù),比如ip地址、端口等信息。Nacos Server接收到注冊(cè)請(qǐng)求后,就會(huì)把這些元數(shù)據(jù)信息存儲(chǔ)在一個(gè)雙層的內(nèi)存Map中。服務(wù)心跳:在服務(wù)注冊(cè)后,Nacos Client會(huì)維護(hù)一個(gè)定時(shí)心跳來持續(xù)通知Nacos Server,說明服務(wù)一直處于可用狀態(tài),防止被剔除。默認(rèn)5s發(fā)送一次心跳。服務(wù)同步:Nacos Server集群之間會(huì)互相同步服務(wù)實(shí)例,用來保證服務(wù)信息的一致性。服務(wù)發(fā)現(xiàn):服務(wù)消費(fèi)者(Nacos Client)在調(diào)用服務(wù)提供者的服務(wù)時(shí),會(huì)發(fā)送一個(gè)REST請(qǐng)求給Nacos Server,獲取上面注冊(cè)的服務(wù)清單,并且緩存在Nacos Client本地,同時(shí)會(huì)在Nacos Client本地開啟一個(gè)定時(shí)任務(wù)定時(shí)拉取服務(wù)端最新的注冊(cè)表信息更新到本地緩存。服務(wù)健康檢查:Nacos Server會(huì)開啟一個(gè)定時(shí)任務(wù)用來檢查注冊(cè)服務(wù)實(shí)例的健康情況,對(duì)于超過15s沒有收到客戶端心跳的實(shí)例會(huì)將它的healthy屬性置為false(客戶端服務(wù)發(fā)現(xiàn)時(shí)不會(huì)發(fā)現(xiàn)),如果某個(gè)實(shí)例超過30秒沒有收到心跳,直接剔除該實(shí)例(被剔除的實(shí)例如果恢復(fù)發(fā)送心跳則會(huì)重新注冊(cè))。
2.Nacos Server 單機(jī)部署配置
2.1. 相關(guān)文件
- 安裝包下載地址:https://github.com/alibaba/Nacos/releases
- 官方文檔: https://nacos.io/zh-cn/docs/deployment.html
- 版本關(guān)系說明: https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明
2.2. 配置流程
- 修改bin/startup.cmd文件信息,默認(rèn)是
集群模式,需修改為單機(jī)模式

- 啟動(dòng)成功頁面

- 登錄頁面(默認(rèn)用戶名,密碼:nacos)

- 可選操作:端口修改,數(shù)據(jù)源設(shè)置—>config/application.properties文件

- sql文件位置

2.3. 搭建Nacos-client 服務(wù)
(1)引入依賴
父Pom中支持spring cloud&spring cloud alibaba, 引入依賴
<!--項(xiàng)目依賴管理,父項(xiàng)目只是聲明依賴,子項(xiàng)目需要寫明需要的依賴(可以省略版本信息)-->
<dependencyManagement>
<dependencies>
<!--spring cloud alibaba 版本管理器-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 版本管理器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springboot 版本管理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子Pom中引入依賴
<!--nacos 服務(wù)注冊(cè)與發(fā)現(xiàn)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--負(fù)載均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.1</version>
</dependency>
(2) application.yml中配置
server:
port: 8020
# 應(yīng)用名稱 (nacos會(huì)將該名稱當(dāng)做服務(wù)名稱)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 172.16.10.132:8848 # 服務(wù)地址
discovery:
username: nacos
password: nacos
# namespace: public
# ephemeral: false # 永久實(shí)例 哪怕宕機(jī)了也不會(huì)刪除該實(shí)例?
# service: # 默認(rèn)取${spring.application.name}的值,也可以通過該選項(xiàng)配置 服務(wù)名稱
# group: #默認(rèn)DEFAULT_GROUP 分組管理
更多Nacos相關(guān)配置: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
(3) 啟動(dòng)springboot應(yīng)用,nacos管理端界面查看是否成功注冊(cè)

(4)代碼
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add() {
System.out.println("下單成功");
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
return "Hello World" + msg;
}
}
注意!!! 需要加上@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
(5) 測(cè)試

3.Nacos Server 集群部署配置(Windows環(huán)境)
3.1.環(huán)境準(zhǔn)備
(1) jdk1.8+
(2) maven 3.3+
(3) nginx 作為負(fù)載均衡
(4) mysql
- 集群部署架構(gòu)圖

3.2. 配置流程
(1) 復(fù)制 Nacos安裝包,修改為 nacos8840、nacos8850、nacos8860

(2) 以nacos8840為例,進(jìn)入nacos8840目錄
(2.1) 修改conf\application.properties的配置,使用外置數(shù)據(jù)源 要使用mysql5.7+(包括)

(2.2) 將conf\cluster.conf.example復(fù)制一份,并改名為cluster.conf,添加節(jié)點(diǎn)配置

nacos8850,nacos8860 按同樣的方式配置。
(3) 創(chuàng)建mysql數(shù)據(jù)庫(kù),sql文件位置:conf\nacos mysql.sql
(4)如果出現(xiàn)內(nèi)存不足:修改啟動(dòng)腳本(bin\startup.sh)的jvm參數(shù)

5) 分別啟動(dòng)nacos8840,nacos8850,nacos8860

(6) 測(cè)試,出現(xiàn)以下界面,則表示Nacos集群已創(chuàng)建成功
登錄 http://172.16.10.132:8840/nacos/index.html ,用戶名和密碼都是nacos

(7) 使用Nginx實(shí)現(xiàn)負(fù)載均衡

3.3. 搭建Nacos-client 服務(wù)
(1) 配置同上。
(2) application.yml中配置
server:
port: 8020
# 應(yīng)用名稱 (nacos會(huì)將該名稱當(dāng)做服務(wù)名稱)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 172.16.10.132:8848 # nginx 服務(wù)地址
discovery:
username: nacos
password: nacos
# namespace: public
# ephemeral: false # 永久實(shí)例 哪怕宕機(jī)了也不會(huì)刪除該實(shí)例?
# service: # 默認(rèn)取${spring.application.name}的值,也可以通過該選項(xiàng)配置 服務(wù)名稱
# group: #默認(rèn)DEFAULT_GROUP 分組管理
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線網(wǎng)盤系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開發(fā)的在線網(wǎng)盤系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有網(wǎng)盤該有的所有功能,感興趣的朋友快來看看吧2022-01-01
Java通過調(diào)用FFMPEG獲取視頻時(shí)長(zhǎng)
這篇文章主要為大家詳細(xì)介紹了Java通過調(diào)用FFMPEG獲取視頻時(shí)長(zhǎng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Java數(shù)據(jù)結(jié)構(gòu)之最小堆和最大堆的原理及實(shí)現(xiàn)詳解
在計(jì)算機(jī)科學(xué)中,堆(heap)?的實(shí)現(xiàn)是一種基于樹的特殊的數(shù)據(jù)結(jié)構(gòu),它可以在數(shù)組上構(gòu)建出樹的結(jié)構(gòu)體,并滿足堆的屬性。本文就來和大家詳細(xì)聊聊Java數(shù)據(jù)結(jié)構(gòu)中的堆,感興趣的可以了解一下2022-09-09
Spring Boot Actuator未授權(quán)訪問漏洞的問題解決
Spring Boot Actuator 端點(diǎn)的未授權(quán)訪問漏洞是一個(gè)安全性問題,可能會(huì)導(dǎo)致未經(jīng)授權(quán)的用戶訪問敏感的應(yīng)用程序信息,本文就來介紹一下解決方法,感興趣的可以了解一下2023-09-09
什么情況下會(huì)出現(xiàn)java.io.IOException?:?Broken?pipe這個(gè)錯(cuò)誤以及解決辦法
這篇文章主要介紹了什么情況下會(huì)出現(xiàn)java.io.IOException?:?Broken?pipe這個(gè)錯(cuò)誤以及解決辦法的相關(guān)資料,這個(gè)錯(cuò)誤表示通信另一端已關(guān)閉連接,常發(fā)生在客戶端關(guān)閉連接、網(wǎng)絡(luò)超時(shí)或資源不足等情況,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10
Mybatis模糊查詢和動(dòng)態(tài)sql語句的用法
今天小編就為大家分享一篇關(guān)于Mybatis模糊查詢和動(dòng)態(tài)sql語句的用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
解決IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問題
這篇文章主要介紹了IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問題及解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

