一莺掠、什么是Nacos
英文全稱Dynamic Naming and Configuration Service,Na為naming/nameServer即注冊中心,co為configuration即注冊中心闯冷,service是指該注冊/配置中心都是以服務(wù)為核心砂心。服務(wù)在nacos是一等公民
二、Nacos原理
Nacos注冊中心分為server與client蛇耀,server采用Java編寫辩诞,為client提供注冊發(fā)現(xiàn)服務(wù)與配置服務(wù)。而client可以用多語言實現(xiàn)纺涤,client與微服務(wù)嵌套在一起译暂,nacos提供sdk和openApi,如果沒有sdk也可以根據(jù)openApi手動寫服務(wù)注冊與發(fā)現(xiàn)和配置拉取的邏輯
Nacos服務(wù)領(lǐng)域模型主要分為命名空間撩炊、集群外永、服務(wù)。在下圖的分級存儲模型可以看到拧咳,在服務(wù)級別伯顶,保存了健康檢查開關(guān)、元數(shù)據(jù)骆膝、路由機制祭衩、保護閾值等設(shè)置,而集群保存了健康檢查模式阅签、元數(shù)據(jù)汪厨、同步機制等數(shù)據(jù),實例保存了該實例的ip愉择、端口劫乱、權(quán)重、健康檢查狀態(tài)锥涕、下線狀態(tài)衷戈、元數(shù)據(jù)、響應(yīng)時間层坠。這些數(shù)據(jù)的作用會在第三章講到
2.1注冊中心原理
服務(wù)注冊方法:以Java nacos client v1.0.1 為例子殖妇,服務(wù)注冊的策略的是每5秒向nacos server發(fā)送一次心跳,心跳帶上了服務(wù)名破花,服務(wù)ip谦趣,服務(wù)端口等信息。同時 nacos server也會向client 主動發(fā)起健康檢查座每,支持tcp/http檢查前鹅。如果15秒內(nèi)無心跳且健康檢查失敗則認(rèn)為實例不健康,如果30秒內(nèi)健康檢查失敗則剔除實例峭梳。
2.2 配置中心原理
三舰绘、 Nacos使用方法
3.1創(chuàng)建命名空間
不同的命名空間邏輯上是隔離的,不特殊設(shè)置的情況下,服務(wù)不會跨命名空間請求捂寿,命名空間主要的作用是區(qū)分服務(wù)使用的范圍口四,比如開發(fā)、測試秦陋、生產(chǎn)蔓彩、灰度可以分別設(shè)置四個命名空間來互相隔離。
如圖所示驳概,在控制臺的 服務(wù)管理-命名空間-新建命名空間按鈕可以創(chuàng)建新的命名空間赤嚼,命名空間創(chuàng)建后,會在列表顯示命名空間ID抡句,這個ID后面會用在服務(wù)的配置文件中
3.2在服務(wù)上配置注冊、配置中心
以springcloud為例杠愧,首先用maven導(dǎo)入nacos clinet的依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
先導(dǎo)入springcloud的alibaba-nacos-config和alibaba-nacos-discovery兩個依賴待榔,這兩個依賴是用于nacos clinet與cloud結(jié)合的工具,0.2.x對應(yīng)springboot 2.x.x ,0.1.x對應(yīng)springboot 1.x.x流济。這兩個組件可以和各種版本的nacos-client結(jié)合锐锣。把其中的nacos-clinet依賴給排除,引入想要引入的nacosclinet版本绳瘟,如下:
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.0.1</version>
</dependency>
在bootstrap.properties上添加配置中心的配置
spring.cloud.nacos.config.server-addr=nacos.e.189.cn:80
spring.cloud.nacos.config.namespace=命名空間id
在application-xxx.properties新增如下配置
spring.cloud.nacos.discovery.server-addr=nacos.e.189.cn:80
spring.cloud.nacos.discovery.namespace=命名空間id
如果springboot啟動類沒有@EnableDiscover
注解則加上
完成如上更改雕憔,即可使用Nacos注冊/配置服務(wù)
3.3服務(wù)間使用feign調(diào)用
演示:
使用Feign、Ribbon均可糖声,在這不做過多介紹
3.4通過配置更改動態(tài)刷新參數(shù)
普通application參數(shù)在配置中心直接配置皆可斤彼,如果需要可以動態(tài)刷新的配置,需要在相應(yīng)類上加上@RefreshScope
注解,示例如下蘸泻,當(dāng)在nacos配置中心更改配置后琉苇,方法getId的值也會刷新。
@RefreshScope
public class IdEntity {
@Value("${id}")
private int id;
public int getId(){
return this.id;
}
}
配置中心參數(shù)修改/設(shè)置
如下兩張圖:在nacos控制臺的配置管理-配置列表中頂部選擇相應(yīng)的命名空間悦施,點擊列表右上角的加號新增配置并扇,Data ID 為 項目名-{spring.profiles.active}.properties,Group如果在bootstrap.properties中不指定則填默認(rèn)的DEFAULT_GROUP,描述寫該配置的描述抡诞,配置內(nèi)容填寫Properties格式或者Yaml格式穷蛹。
3.5 nacos其他功能使用與介紹
控制臺手動上下線實例
在控制臺的服務(wù)管理-服務(wù)列表選擇一個服務(wù)點擊詳情,在下方的集群列表可以看到有上線/下線按鈕昼汗,點擊即可以對該實例執(zhí)行上線/下線操作肴熏,下線后的實例不會被請求
配置實例權(quán)重
可以通過手動配置權(quán)重來控制流量,當(dāng)一個集群內(nèi)兩個實例顷窒,權(quán)重越高扮超,到達該實例的請求比例越多。
權(quán)重的初始值是1
配置保護閾值
保護閾值的范圍是0~1
服務(wù)的健康比例=服務(wù)的健康實例/總實例個數(shù)
當(dāng)服務(wù)健康比例<=保護閾值時候,無論實例健不健康都會返回給調(diào)用方
當(dāng)服務(wù)健康比例>保護閾值的時候出刷,只會返回健康實例給調(diào)用方
在服務(wù)管理-服務(wù)列表選擇一個服務(wù)點擊詳情可以配置