Nacos是阿里巴巴的產品,現在是SpringCloud中的一個組件。Nacos本身就是一個單獨的軟件,需要下載並且安裝,下載好後在nacos文件bin文件夾中cmd命令 startup.cmd -m standalone 進行單體啓動(nacos默認集羣啓動),彈出naocs圖標以及對應的登錄頁信息則啓動成功,進入頁面登錄即可 賬號 密碼默認都為 nacso
1 註冊中心
一、基本使用
在父工程中引入spring-cloud-alilbaba的管理依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
在微服務中引入nacos客户端依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在微服務的application.yml文件中添加nacos的配置文件
spring:
application:
name: xx-xxx-service # 應用名稱
cloud:
nacos:
server-addr: 127.0.0.1:8848 #這裏填寫註冊服務地址
啓動naocs 登錄後查看是否有對應的服務註冊列表
一點要在服務類中寫個測試接口,只有spring啓動類的空項目註冊列表不顯示!!!
二、Nacos服務分級存儲模型
Nacos服務分級為 一級 服務名 二級 服務實例集羣 三級 服務實例
設置服務實例對應的集羣 配置文件中添加discovery相關的配置
spring:
application:
name: xx-xxx-service # 應用名稱
cloud:
nacos:
server-addr: 127.0.0.1:8848 #這裏填寫註冊服務地址
discovery:
cluster-name: HZ # 配置集羣名稱,也就是機房位置,例如:HZ,杭州
三、Nacos與Ribbon
Nacos中配置ribbon相關配置為
userservice: #服務提供者服務名
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規則
該負載均衡規則默認現在同一集羣中尋找服務提供者實例,沒有再在不同的集羣中尋找服務列表,再隨機選擇某個服務實例
這樣的好處:同一集羣一般都在同一地點,響應時間更快
也可手動再Nacos中給每個服務實例配置權重來使某個實例使用機率更高或更低,權重值在0~1之間,越高選中概率越高,0則完全不會被選中
三、Nacos的環境隔離
Nacos中服務存儲和數據存儲的最外層都是一個名為namespace的東西,用來做最外層隔離
Nacos中可用通過不同的命名空間把微服務分成不同的組,組與組之間無法相互調用
Nacos新增命名空間流程:
修改配置文件
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: SH # 上海
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空間,填ID
四、臨時實例與非臨時實例
區別:臨時實例宕機時,會從nacos的服務列表中剔除,而非臨時實例則不會
臨時實例Naocs採用心跳檢測是否掛了,非臨時實例Nacos主動詢問監測是否掛了
配置非臨時實例方式:修改配置文件為:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 設置為非臨時實例
五、與EUREKA比較
Nacos與eureka的共同點:
都支持服務註冊和服務拉取,消費者垃取服務提供者列表緩存,每30秒拉取更新一次
都支持服務提供者心跳方式做健康檢測
Nacos與Eureka的區別:
Nacos支持服務端主動檢測提供者狀態:臨時實例採用心跳模式,非臨時實例採用主動檢測模式
臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
Nacos支持服務列表變更的消息推送模式,服務提供者變更後會再主動推送消息給消費者,服務消費者的服務列表更新更及時
Nacos集羣默認採用AP方式,當集羣中存在非臨時實例時,採用CP模式;Eureka採用AP方式
2 配置中心
nacos可以作為配置中心使用,達到多實例的配置同步,優先級是:
一 nacos配置中心基礎使用
naocs操作:
Data ID規則 服務名-環境.文件後綴
項目操作:
服務模塊增加依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
增加一個bootstrap.yml配置文件,裏面主要nacos相關配置,他優先級高於application.yml,使我們項目啓動時取拉取nacos中的配置文件
bootstrap.yml中配置:
spring:
application:
name: userservice # 服務名稱
profiles:
active: dev #開發環境,這裏是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件後綴名
這個配置文件就有優先在nacos中尋找userservice-dev.yaml的配置文件
application.yml中配置
server:
port: 9999 #端口
測試代碼:
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternConfig {
private String dateformat;
public String getDateformat() {
return dateformat;
}
public void setDateformat(String dateformat) {
this.dateformat = dateformat;
}
}
@RestController
@RequestMapping("/hello")
public class hello {
@Autowired
private PatternConfig patternConfig;
@GetMapping("/test")
private String test(){
return patternConfig.getDateformat();
}
}
nacos中的測試配置:
使用@ConfigurationProperties注入的配置文件是可以熱更新的
二 nacos配置中心配置文件多環境共享、多服務共享
多環境共享:
服務名-環境.文件後綴(如:userservice-dev.yml) 只能對應環境使用 服務名.文件後綴 全環境都可使用(如:userservice.yml),優先級 [服務名]-[環境].yaml >[服務名].yaml > 本地配置,所以,只需要把要共享的配置放在服務名.yaml中就可以多環境共享
多服務共享:
方式一:
spring:
application:
name: userservice # 服務名稱
profiles:
active: dev # 環境,
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件後綴名
shared-configs: # 多微服務間共享的配置列表
- dataId: common.yaml # 要共享的配置文件id
手動配置 dataId: xxx.yaml
方式二:
spring:
application:
name: userservice # 服務名稱
profiles:
active: dev # 環境,
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件後綴名
extends-configs: # 多微服務間共享的配置列表
- dataId: extend.yaml # 要共享的配置文件id
手動配置 dataId: xxx.yaml