SpringCloud Alibaba Nacos
- 1、Nacos概述
-
- 1.1、基本介紹
- 1.2、與其它服務中心對比
- 1.3、安裝并運作Nacos
- 2、Nacos服務注冊中心
-
- 2.1、基于Nacos的服務提供者
- 2.2、基于Nacos的服務消費者
- 3、Nacos作為配置中心(基礎配置)
-
- 3.1、Nacos中的比對規則
- 3.2、微服務拉取配置
- 3.3、Nacos作為配置中心(分類配置)
- 4、Nacos叢集和持久化配置
-
- 4.1、概述
- 4.2、Nacos持久化配置
- 4.3、Linux版Nginx+Nacos+MySQL配置高可用
- 5、學習位址
1、Nacos概述
1.1、基本介紹
Nacos:Naming+Configuration的前兩個字母,S代表Service。一個更易于建構雲原生應用的動态服務發現、配置管理和服務管理平台。
Nacos就是注冊中心 + 配置中心的組合:Nacos = Eureka+Config +Bus
GitHub位址:https://github.com/alibaba/Nacos
中文文檔:https://nacos.io/zh-cn/index.html
1.2、與其它服務中心對比
Nacos支援AP與CP之間的切換
C是所有節點在同一時間看到的資料是一緻的;而A的定義是所有的請求都會收到響應。
何時選擇使用何種模式?
一般來說,如果不需要存儲服務級别的資訊且服務執行個體是通過nacos-client注冊,并能夠保持心跳上報,那麼就可以選擇AP模式。目前主流的服務如 Spring cloud 和 Dubbo 服務,都适用于AP模式,AP模式為了服務的可能性而減弱了一緻性,是以AP模式下隻支援注冊臨時執行個體。
如果需要在服務級别編輯或者存儲配置資訊,那麼 CP 是必須,K8S服務和DNS服務則适用于CP模式。
CP模式下則支援注冊持久化執行個體,此時則是以 Raft 協定為叢集運作模式,該模式下注冊執行個體之前必須先注冊服務,如果服務不存在,則會傳回錯誤。
curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
1.3、安裝并運作Nacos
Windows版本
1、下載下傳Nacos位址:https://github.com/alibaba/nacos/releases
2、解壓到指定檔案夾,進入bin目錄下直接點選startup.cmd運作。
3、通路:http://localhost:8848/nacos
4、賬号和密碼都是nacos登入頁面即可登入成功
2、Nacos服務注冊中心
2.1、基于Nacos的服務提供者
1、微服務父Pom添加依賴spring-cloud-alibaba-dependencies,子Pom添加spring-cloud-starter-alibaba-nacos-discovery依賴。(後面不做介紹)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、Yaml配置檔案
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos位址
management:
endpoints:
web:
exposure:
include: '*' #暴露所有web監控端點
3、主啟動類
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001
{
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
4、業務類(傳回該微服務的端口号)
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id) {
return "Nacos 注冊中心,,端口号: " + serverPort + "\t id=" + id;
}
}
5、測試
可以在Nacos-服務管理-服務清單控制台看到注冊進來的微服務名稱
再浏覽器中輸入http://localhost:9001/payment/nacos/123可以通路到端口号加上id。
6、負載均衡前期準備
再依照9001端口建立9002微服務,加依賴,改Yaml,寫主類/業務類。
如果想省事可以直接拷貝虛拟端口映射:①.再已運作的9001右擊-Copy Configuration。②.更改配置名,并添加VM options:-Dserver port-9011。可以開啟以9011端口的微服務。
2.2、基于Nacos的服務消費者
為什麼Nacos自動支援負載均衡
因為Nacos在引入已經自動內建了Ribbon,是以自帶負載均衡功能。
1、添加依賴spring-cloud-starter-alibaba-nacos-discovery。
2、修改Yaml配置檔案
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消費者将要去通路的微服務名稱(注冊成功進nacos的微服務提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
3、主啟動類
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
public static void main(String[] args)
{
SpringApplication.run(OrderNacosMain83.class,args);
}
}
4、注冊RestTemplate用于調用服務類(配置類)
@Configuration
public class ApplicationContextBean {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
5、業務類
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping("/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Integer id) {
return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
}
}
6、測試
可以在Nacos控制台看到已經注冊的兩個微服務提供者與一個微服務消費者
通過通路:http://localhost:83/consumer/payment/nacos/123
可以發現獲得的端口号是9001和9002交替出現,是以證明Nacos自動實作輪詢負載均衡功能,既可以自動更改Ribbon的負載均衡的算法。
3、Nacos作為配置中心(基礎配置)
3.1、Nacos中的比對規則
配置規則官網:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
#公式:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
簡單來說:
①、prefix 預設為 spring.application.name (應用名)的值
②、spring.profile.active 即為目前環境對應的 profile,可以通過配置項 spring.profile.active 來配置。
③、file-exetension 為配置内容的資料格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置
3.2、微服務拉取配置
1、添加spring-cloud-starter-alibaba-nacos-config依賴
為什麼兩個配置?
Nacos同springcloud-config一樣,在項目初始化時,要保證先從配置中心進行配置拉取,
拉取配置之後,才能保證項目的正常啟動。
springboot中配置檔案加載存在優先級順序的,bootstrap優先級高于application
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、建立兩個配置檔案bootstrap與application
bootstrap
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心位址
config:
server-addr: localhost:8848 #Nacos作為配置中心位址
file-extension: yaml #指定yaml格式的配置
application
spring:
profiles:
active: dev # 表示開發環境
3、主啟動類
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
4、業務類
@RestController
@RefreshScope //在控制器類加入@RefreshScope注解使目前類下的配置支援Nacos的動态重新整理功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
5、測試
啟動前需要在nacos用戶端-配置管理-配置管理欄目下有對應的yaml配置檔案,通路:http://localhost:3377/config/info
6、自帶動态重新整理
修改下Nacos中的yaml配置檔案,再次調用檢視配置的接口,就會發現配置已經重新整理。
3.3、Nacos作為配置中心(分類配置)
1、DataID方案
通過修改application.yml配置檔案中的profile環境實作yaml的切換
2、Group方案
通過修改bootstrap.yml配置檔案中的spring.cloud.nacos.config.group=組名即可修改組
3、Namespace方案
通過修改bootstrap.yml配置檔案中的spring.cloud.nacos.config.namespace=空間ID即可修命名空間
4、Nacos叢集和持久化配置
4.1、概述
官方說明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
我們采用Nginx叢集+Nacos叢集+MySQL叢集進行搭建高可用
4.2、Nacos持久化配置
Nacos預設使用自帶的資料庫derby進行持久化,可以在源代碼看到引入了derby資料庫的依賴。
Windows版如何從derby切換到mysql
1、nacos\conf目錄下找到sql腳本:nacos-mysql.sql。在MySQL建立庫nacos_config;
并執行nacos-mysql.sql中的腳本建立表。
2、nacos\conf目錄下找到application.properties添加以下内容
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=資料庫賬号
db.password=資料庫密碼
3、重新啟動Nacos可以看到沒有記錄了,重新建立一個配置檔案可以在資料庫中看到裡面有記錄證明修改成功。
4.3、Linux版Nginx+Nacos+MySQL配置高可用
1、下載下傳Linux版本Nacos,并使用tar -zxvf進行解壓到Linux伺服器中
2、下載下傳Linux版本MySQL版本>5.6.5以上。并使用mysql -uroot -proot,-u後面是使用者名,-p後面是密碼。建立資料庫nacos_config并執行nacos\conf目錄下的sql腳本:nacos-mysql.sql。nacos\conf目錄下找到application.properties添加以下内容:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=資料庫賬号
db.password=資料庫密碼
3、Linux伺服器上nacos的叢集配置cluster.conf,nacos/conf/cluster.conf修改為ip:端口号。需要使用:hostname -i指令Linux識别的ip位址不能是127.0.0.1。
4、編輯Nacos的啟動腳本startup.sh,使它能夠接受不同的啟動端口
/mynacos/nacos/bin 的startup.sh(新版本不用修改)
5、在bin目錄下使用./startup.sh -p 三個端口号開啟服務
6、Nginx的配置,由它作為負載均衡器
編輯/usr/local/nginx/conf下的nginx.conf檔案:
upstream cluster{
server 127.0.0.1:3333;
server 127.0.0.1:4444;
server 127.0.0.1:5555;
}
server {
listen 1111;
server_name localhost;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster;
}
後面省略
7、測試通過nginx通路nacos:http://192.168.174.145:1111/nacos如果能夠成功通路到并添加一個配置檔案能夠在mysql的表中發現增加記錄證明叢集搭建完畢。
8、通過服務端通路Nacos叢集:修改yaml配置檔案spring.cloud.nacos.discover.server-addr=192.168.174.145:1111,如果能夠在Nacos看到服務注冊進入那麼叢集搭建成功。
5、學習位址
來源:哔哩哔哩尚矽谷:https://www.bilibili.com/video/BV18E411x7eT