Nacos可以理解為是一個(gè)集成注冊(cè)中心、配置中心、服務(wù)管理的平臺(tái)
官網(wǎng)文檔地址:https://nacos.io/docs/latest/what-is-nacos/
一、環(huán)境配置
本次學(xué)習(xí)采用在虛擬中搭建nacos服務(wù),虛擬機(jī)環(huán)境:
jdk 1.8
nacos 2.2.1
- ubuntu 安裝jdk1.8
#更新包列表
sudo apt update
#安裝OpenJDK 8
sudo apt install openjdk-8-jdk
#驗(yàn)證安裝是否成功
java -version
jdk成功安裝

- 部署 Nacos-server 2.2.1
Nacos-server下載地址:https://github.com/alibaba/Nacos/releases
Ubuntu選擇后綴為.tar.gz版本

移動(dòng)壓縮包至虛擬機(jī)

解壓壓縮包
# -C后是解壓后文件存放路徑,-z表示解壓的tar.gz格式,-x表示解壓,-v表示詳細(xì)輸出,-f表示指定文件名
tar -zxvf nacos-server-2.2.1.tar.gz -C ./
二、啟動(dòng)nacos服務(wù)
Nacos-server 2.2.1 默認(rèn)配置nacos.core.auth.plugin.nacos.token.secret.key沒(méi)有添加,需要自行添加。
不添加的情況下在啟動(dòng)的時(shí)候會(huì)報(bào)錯(cuò),所以這里添加了官網(wǎng)默認(rèn)值:
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
- 單機(jī)啟動(dòng)Nacos服務(wù):
# 使用bash命令是因?yàn)閁buntu是默認(rèn)使用bash服務(wù),其他linux系統(tǒng)可用使用的是sh命令
bash startup.sh -m standalone
根據(jù)后提示的日志輸出可以查看服務(wù)是否正常啟動(dòng):

根據(jù)console地址可以進(jìn)入nacos控制臺(tái)查看:
Nacos默認(rèn)用戶名和密碼均為
nacos

三、測(cè)試工程搭建
測(cè)試工程分為兩部分:
1、訂單服務(wù);
2、庫(kù)存服務(wù)。
- 訂單服務(wù)
引入依賴
<!--nacos-服務(wù)注冊(cè)發(fā)現(xiàn)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--服務(wù)調(diào)用負(fù)載均衡組件,老版本中默認(rèn)負(fù)載均衡組件,新版本需要自己添加-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
配置文件(application.yml),記得將下方的{nacos服務(wù)地址}替換成自己實(shí)際的Nacos服務(wù)地址
server:
port: 8020
# 應(yīng)用名稱 (nacos會(huì)將該名稱當(dāng)做服務(wù)名稱)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: {nacos服務(wù)地址}:8848
discovery:
username: nacos
password: nacos
namespace: public
接口邏輯:當(dāng)調(diào)用下單服務(wù)時(shí)遠(yuǎn)程調(diào)用stock-server庫(kù)存服務(wù)進(jìn)程庫(kù)存扣減
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private 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;
}
}
RestTemplate為springboot遠(yuǎn)程調(diào)用restful接口的推薦方式
為了讓spring容器管理RestTemplate實(shí)例bean,需要在config類里添加如下代碼@LoadBalanced是服務(wù)發(fā)現(xiàn)和負(fù)載均衡的一個(gè)標(biāo)識(shí)標(biāo)簽不可以省略
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
這里用于測(cè)試,就沒(méi)有單獨(dú)創(chuàng)建config類而是直接放在了啟動(dòng)類里

- 庫(kù)存服務(wù)
引入依賴(因?yàn)閹?kù)存服務(wù)只是被調(diào)用放,所以無(wú)需引入服務(wù)調(diào)用負(fù)載均衡組件)
<!--nacos-服務(wù)注冊(cè)發(fā)現(xiàn)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件(application.yml),記得將下方的{nacos服務(wù)地址}替換成自己實(shí)際的Nacos服務(wù)地址
server:
port: 8021
# 應(yīng)用名稱 (nacos會(huì)將該名稱當(dāng)做服務(wù)名稱)
spring:
application:
name: stock-service
cloud:
nacos:
server-addr: {nacos服務(wù)地址}:8848
discovery:
username: nacos
password: nacos
接口邏輯:被調(diào)用后進(jìn)行扣減庫(kù)存
@RestController
@RequestMapping("/stock")
public class StockController {
@RequestMapping("/reduct")
public String reduct() throws InterruptedException {
System.out.println("扣減庫(kù)存");
return "扣減庫(kù)存:";
}
}
四、測(cè)試
-
啟動(dòng)訂單服務(wù)(Order)和庫(kù)存服務(wù)(Stock)
服務(wù)啟動(dòng)
觀察nacos控制臺(tái)已經(jīng)正確注冊(cè)了兩個(gè)服務(wù)

-
進(jìn)行下訂單操作
服務(wù)整體調(diào)用效果
order服務(wù)調(diào)用效果
stock服務(wù)調(diào)用效果



