Nacos 簡介
Nacos 是一個(gè)易于使用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺(tái),用于構(gòu)建云原生的應(yīng)用程序
Nacos 的關(guān)鍵特性包括以下幾項(xiàng):
- 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測:服務(wù)提供者使用原生 SDK、OpenAPI 等注冊(cè)服務(wù)后,服務(wù)消費(fèi)者可以使用 HTTP&API 查找和發(fā)現(xiàn)服務(wù)。Nacos 提供對(duì)服務(wù)的實(shí)時(shí)健康檢查,阻止向不健康的主機(jī)或服務(wù)實(shí)例發(fā)送請(qǐng)求
- 動(dòng)態(tài)配置服務(wù):動(dòng)態(tài)配置服務(wù)可以讓你以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置。動(dòng)態(tài)配置消除了配置變更時(shí)重新部署應(yīng)用和服務(wù)的需要,讓配置管理變得更加高效和敏捷
- 動(dòng)態(tài) DNS 服務(wù):動(dòng)態(tài) DNS 服務(wù)支持權(quán)重路由,讓你更容易實(shí)現(xiàn)中間層負(fù)載均衡、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單 DNS 解析服務(wù)
- 服務(wù)及其元數(shù)據(jù)管理:Nacos 從微服務(wù)平臺(tái)建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù),包括管理服務(wù)的描述、生命周期、服務(wù)的靜態(tài)依賴分析、服務(wù)的健康狀態(tài)、服務(wù)的流量管理、路由及安全策略、服務(wù)的 SLA 以及首要的 metrics 統(tǒng)計(jì)數(shù)據(jù)
Nacos 快速開始
1. Nacos Server 單機(jī)模式
在使用 Nacos 之前,需要先下載 Nacos 并啟動(dòng) Nacos Server,Nacos Server 有兩種運(yùn)行模式:standalone(單機(jī))和 cluster(集群),這里以 2.2.3.release,windows 環(huán)境為例
前往 Github 下載 Nacos Server:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
解壓壓縮包,在 bin 目錄下執(zhí)行命令 .\startup.cmd -m standalone
在瀏覽器中訪問:http://localhost:8848/nacos,輸入用戶名和密碼 Nacos/Nacos 便可進(jìn)入 Nacos 首頁
如要關(guān)閉 Nacos,在 bin 目錄下執(zhí)行命令 .\shutdown.cmd
0.7 版本之前的 Nacos 在單機(jī)模式時(shí)使用入式數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),不方便觀察數(shù)據(jù)存儲(chǔ)的基本情況,0.7 版本之后支持 MySQL 數(shù)據(jù)源能力,具體的操作步驟如下:
-
安裝 MySQL 數(shù)據(jù)庫(版本要求5.6.5+)
-
創(chuàng)建數(shù)據(jù)庫 nacos_config,在 conf 目錄下找到 mysql-schema.sql 初始化文件并進(jìn)行初始化
-
修改 conf/applicationproperties 文件,增加 MySQL 數(shù)據(jù)源配置
### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=123
-
之后 Nacos 所有的數(shù)據(jù)都會(huì)保存到 MySQL
2. Nacos Server 集群模式
Nacos 單機(jī)模式僅僅適用于測試和單機(jī)適用,生產(chǎn)環(huán)境大多適用集群模式以確保高可用
接下來講解如何搭建 Nacso 集群環(huán)境,具體步驟如下:
-
將下載的 Nacos 安裝包復(fù)制兩份,分別命名為 Nacos-01,Nacos-02、Nacos-03,注意,集群模式必須使用配置數(shù)據(jù)庫(如 MySQL)
-
修改 Nacos-02、Nacos-03 的配置文件 conf/applicationproperties,將服務(wù)啟動(dòng)端口分別改為 8850 和 8852
#*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: ### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced. spring.datasource.platform=mysql spring.sql.init.platform=mysql #*************** Spring Boot Related Configurations ***************# ### Default web context path: server.servlet.contextPath=/nacos ### Include message field server.error.include-message=ALWAYS ### Default web server port: server.port=8850
注意:nacos 在 2.0 版本以后,除對(duì)外的端口外,還占用另外三個(gè)端口:
- raft port: ${server.port} - 1000
- grpc port: ${server.port} + 1000
- grpc port for server: ${server.port} + 1001
假設(shè)對(duì)外端口為 8848,即總共會(huì)有4個(gè)端口被占用,分別為 7848、8848、9848、9849,因此,在同一臺(tái)機(jī)啟動(dòng)多個(gè) nacos 節(jié)點(diǎn)時(shí)要注意避開所有占用的端口
-
在 Nacos-01、Nacos-02、Nacos-03 的 conf 目錄下添加 cluster.conf 集群配置文件
### 這里簡單將3個(gè)nacos實(shí)例部署在同一個(gè)機(jī)器下 # 127.0.0.1:8848 127.0.0.1:8850 127.0.0.1:8852
-
分別進(jìn)入 Nacos-01、Nacos-02、Nacos-03 的 bin 目錄執(zhí)行命令
.\startup.cmd
,沒有參數(shù)默認(rèn)就是集群模式
3. Nacos+Nginx 集群模式
在 Nginx 核心配置文件 nginx.conf 添加如下配置
server {
listen 8847;
server_name localhost;
location /nacos {
proxy pass http://nacos-server/nacos;
}
upstream nacos-server {
server 127.0.0.1:8848;
server 127.0.0.1:8850;
server 127.0.0.1:8852;
}
}
啟動(dòng) Nginx,訪問:http://localhost:8847/nacos,至此我們完成 Nacos+Nginx 的搭建
SpringBoot 注冊(cè)到 Nacos
1. Nacos 配置管理
以 SpringBoot 2.3.12.RELEASE 為例,在項(xiàng)目的 pom.xml 文件添加如下依賴:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>
在 application.properties 中配置 Nacos Server 的地址
# 如果搭建了集群只需要填其中一個(gè)節(jié)點(diǎn)的ip:port即可
nacos.config.server-addr=127.0.0.1:8848
# 如果配置了Nginx,則輸入配置的地址,如上面我配置的
# nacos.config.server-addr=127.0.0.1:8847/nacos
在啟動(dòng)類中使用 @NacosPropertySource
加載 dataId 為 springboot-nacos-config 的配置源,并開啟自動(dòng)更新
@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootNacosApplication.class, args);
}
}
當(dāng)然,我們需要在 Nacos 的配置列表中添加 Data-Id: springboot-nacos-config
的配置文件
test.name=hahaha
通過 Nacos 的 @NacosValue
注解設(shè)置屬性值
@RestController("config")
public class ConfigCon {
@NacosValue(value = "${test.name}", autoRefreshed = true)
private String name;
@GetMapping("get")
public String get() {
return name;
}
}
2. Nacos 服務(wù)注冊(cè)
在項(xiàng)目的 pom.xml 文件添加如下依賴:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>
在 application.properties 中配置 Nacos Server 的地址
spring.application.name=springboot-nacos
server.port=8080
server.address=127.0.0.1
# 如果搭建了集群只需要填其中一個(gè)節(jié)點(diǎn)的ip:port即可
nacos.discovery.server-addr=127.0.0.1:8848
# 如果配置了Nginx,則輸入配置的地址,如上面我配置的
nacos.discovery.server-addr=127.0.0.1:8847/nacos
修改啟動(dòng)類,運(yùn)行即可
@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication implements CommandLineRunner {
// 使用@NacosInjected注入Nacos的NamingService實(shí)例
// NamingService是Nacos對(duì)外提供給使用者的接口
@NacosInjected
private NamingService namingService;
@Value("${spring.application.name}")
private String applicationName;
@Value("${server.port}")
private Integer serverPort;
@Value("${server.address}")
private String serverAddress;
public static void main(String[] args) {
SpringApplication.run(SpringbootNacosApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
//應(yīng)用啟動(dòng)時(shí),將服務(wù)注冊(cè)到Nacos
namingService.registerInstance(applicationName, serverAddress, serverPort);
}
}
Nacos SpringCloud
本節(jié)主要講解 SpringCloud 的如何通過 Nacos 實(shí)現(xiàn)配置管理和服務(wù)發(fā)現(xiàn),以 SpringBoot 2.3.12.RELEASE 為例
1. Nacos 配置管理
在項(xiàng)目的 pom.xml 文件添加如下依賴:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.10-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在 application.properties 中配置 Nacos Server 的地址
server.port=8080
spring.application.name=springcloud-nacos
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# spring.cloud.nacos.config.server-addr=127.0.0.1:8847/nacos
spring.application.name
之后會(huì)構(gòu)成 Nacos 配置管理 datald 字段的一部分,在 Nacos Spring Cloud中,datald 的完整格式如下:${prefix}-${spring.profile.active}.${file-extension}
-
${prefix}
:默認(rèn)為spring.application.name
的值,也可以通過spring.cloud.Nacos.config.prefix
配置項(xiàng)來配置 -
${spring.profile.active}
:當(dāng)前環(huán)境對(duì)應(yīng)的 profile,當(dāng)spring.profile.active
為空時(shí),對(duì)應(yīng)的連接符-
也將不存在,datald 的拼接格式變成${prefix}.${file-extension}
-
${file-extension}
:配置內(nèi)容的數(shù)據(jù)格式,可以通過 `spring.cloud.Nacos.config.file-extension· 來配置 properties 或 yaml 類型
在 Nacos 配置列表中創(chuàng)建 springcloud-nacos.properties 配置文件
test.name=hahah
開發(fā) Controller 獲取配置
@RefreshScope
@RestController("config")
public class ConfigCon {
@Value("${test.name}")
private String name;
@GetMapping("get")
public String get() {
return name;
}
}
2. Nacos 服務(wù)注冊(cè)
在項(xiàng)目的 pom.xml 文件添加如下依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.10-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在 application.properties 中配置 Nacos Server 的地址
server.port=8080
spring.application.name=springcloud-nacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8847/nacos
在啟動(dòng)類上添加 @EnableDiscoveryClient
注解開啟服務(wù)注冊(cè)發(fā)現(xiàn)功能
@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudNacosApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudNacosApplication.class, args);
}
}
在 Nacos 管理頁面查看服務(wù)列表,發(fā)現(xiàn)服務(wù)已經(jīng)注冊(cè)到 Nacos,服務(wù)提供端和消費(fèi)端都用這種方式進(jìn)行注冊(cè),之后消費(fèi)端可直接通過服務(wù)名直接調(diào)用提供端的接口
命名空間 & 分組
除了 DataId,Nacos 還提供了命名空間(Namespace)和 配置分組(Group)用于組織配置。不同的 Namespace 下,可以存在相同的 Group 或 DataId 的配置。同理,不同的 Group 下,可以存在相同的 DataId
一般情況下,最好使用 Namespace 區(qū)分環(huán)境(dev、sit、uat、prod),Group 區(qū)分微服務(wù)或項(xiàng)目。Nacos 的權(quán)限管理可以控制到命名空間,但不能控制分組。不同的賬號(hào)對(duì)應(yīng)不同的環(huán)境,能夠?qū)⒏鱾€(gè)環(huán)境隔離開
在 Nacos 控制臺(tái)名為 dev 的 Namespace,在其下創(chuàng)建名為 springcloud-project 的分組以及名為 service-01.yml 的配置文件
項(xiàng)目下創(chuàng)建 bootstrap.yml 配置文件文章來源:http://www.zghlxwxcb.cn/news/detail-628607.html
server:
port: 8000
spring:
application:
name: service-01
cloud:
nacos:
config:
server-addr: 127.0.0.1:8847/nacos
namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99 # 命名空間id
group: springcloud-project # 分組名
file-extension: yml # 指定格式
discovery:
server-addr: 127.0.0.1:8847/nacos
namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99 # 命名空間id
group: springcloud-project # 分組名
創(chuàng)建 TestCon 類,獲取配置值文章來源地址http://www.zghlxwxcb.cn/news/detail-628607.html
@Slf4j
@RestController
public class TestCon {
@Value("${test.value}")
private String testValue;
@GetMapping("/test/getConfig")
public void getConfig() {
log.info("testValue: {}", testValue);
}
}
到了這里,關(guān)于注冊(cè)中心/配置管理 —— SpringCloud Alibaba Nacos的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!