Nacos基本配置

為什么需要服務注冊中心?
微服務時代的服務管理
在微服務時代,我們所有的服務都被勁量拆分成最小的粒度,原先所有的服務都在混在1個server里,現在就被按照功能或者對象拆分成N個服務模塊,這樣做的好處是深度解耦,1個模塊只負責自己的事情就好,能夠實現快速的迭代更新。壞處就是服務的管理和控制變得異常的復雜和繁瑣,人工維護難度變大。還有排查問題和性能變差(服務調用時的網絡開銷)文章來源地址:https://www.yii666.com/blog/390499.html
什么是注冊中心?
注冊中心的作用一句話概括就是存放和調度服務,實現服務和注冊中心,服務和服務之間的相互通信。注冊中心可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關系。在分布式架構中,服務會注冊到這里,當服務需要調用其它服務時,就到這里找到服務的地址,進行調用。
如果沒有注冊中心?會怎樣
在不用服務注冊之前,怎么去維護這種復制的關系網絡呢?答案就是:寫死!。
- 將其他模塊的ip和端口寫死在自己的配置文件里,甚至寫死在代碼里,每次要去新增或者移除1個服務的實例的時候,就得去通知其他所有相關聯的服務去修改。
- 隨之而來的就是各個項目的配置文件的反復更新、每隔一段時間大規模的ip修改和機器裁撤,非常的痛苦。
而有了注冊中心之后,每個服務在調用別人的時候只需要服務的名稱就好,調用時會通過注冊中心根據服務編碼進行具體服務地址進行調用。
服務注冊中心的作用就是【服務的注冊】和【服務的發現】
- 服務注冊,就是將提供某個服務的模塊信息(通常是這個服務的ip和端口)注冊到1個公共的組件上去(比如: zookeeper\consul)。
- 服務發現,就是新注冊的這個服務模塊能夠及時的被其他調用者發現。不管是服務新增和服務刪減都能實現自動發現。
服務發現是怎么回事?
- 微服務啟動的時候將service_name,IP,port,status發送到Nacos服務注冊中心,Nacos保存這些數據。
- 消費者本地緩存服務信息,并且定時同步,所以就算Nacos宕機了也不怕不能調用
- 服務提供者每5秒發送心跳給服務發現組件,當一段時間沒收到心態,服務發現組件標記服務狀態為宕機。15秒無心跳則認為實例不健康,30秒健康檢查失敗則剔除實例。
- 這樣的好處:
- 不用每次都請求服務發現組件,提升了性能
- 服務發現組件崩潰,不影響正常調用
整合Nacos 服務中心
nacos 下載地址 :https://github.com/alibaba/nacos/releases
nacos 搭建參考文檔地址:https://nacos.io/zh-cn/docs/quick-start.html
下載那一個包?如何解決兼容性問題?技巧如下:
打開idea進入pom.xml 文件,打開spring-cloud-alibaba-dependencies 找到Nacos-client的版本
加依賴
<!--nacos 注冊中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
寫配置
spring: application: name: shopping-account-service cloud: nacos: discovery: server-addr: localhost:8848
寫注解(開發)
//早期版本需要在啟動類上加本注解,現在已經不是必須的了 @EnableDiscoveryClient
根據service-name獲取在nacos中注冊的實例信息:
DiscoveryClient 可以操作Nacos元數據
DiscoveryClient由SpringCloud提供,不只是可以查詢Nacos。
元數據有什么用?
列如:有服務器A版本為V1.0,有服務器B版本為V1.0,有服務器C版本為V2.0,有服務器D版本為V2.0,可以做到V1.0的服務只調用V1.0,V2.0只調用V2.0。
服務發現的領域模型
- Namespace 命名空間(實現隔離、默認是public) 對應不同的環境(dev、prot、test)
- group 分組對應不同的節點(不同的微服務分在在同一個分組)
- service 服務 對應不同的集群服務
- cluster:(集群-對應服務器)對指定微服務的一個虛擬劃分,默認DEFAULT
- instance:微服務實列
為什么要實現配置管理?
不同的環境不同的配置
如:dev和prod環境的數據庫地址和密碼肯定不一樣的
配置屬性動態刷新
如:雙十一需要修改數據庫連接池,我需要在不重啟服務的情況下修改
配置動態刷新
動態刷新的幾種方式
方式一:yaml中開啟 refresh-enabled=true 時(默認開啟),通過applicationContext.getEnvironment.getProperty 直接獲取
方式二:standalone使用,@NacosValue獲取最新值nacos配置信息需要寫在配置類上
方式三:結合springcloud ,@Value獲取最新值一定要加@RefreshScope注解,配置文件中配置refresh: true
Spring boot 啟動或者更改配置后控制臺打印配置信息
# 日志級別,可以指定到具體類 logging: level: # 3、在任意格式的配置文件中將該包路徑的日志設置為 ERROR 或者 WARN 級別即可 # Nacos 注冊中心客戶端心跳日志禁用 get changedGroupKeys:[] 刷屏 com: alibaba: cloud: nacos: DEBUG
配置共享
其他配置方式中可以查看
配置優先級
其他配置方式中可以查看
數據持久化
服務發現組件(所有配置文件存放的位置)
數據持久化默認位置:~/nacos/naming
配置服務器
配置數據:$NACOS_HOME/data/derby-data
在nacos控制臺修改的配置都在此數據庫中做持久化
derby-data:不適合生產環境配置,內嵌(只能單機)數據庫不能做高可用。
需要停止nacos才能查看。
快照:
保存位置:~/nacos/config
里面主要是在nacos中設置的內容,快照可以提升性能以及做容災
加依賴
<!--nacos 注冊中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
寫配置
spring: cloud: nacos: discovery: #Nacos的地址,如果是集群的話使用,號隔開 如:localhost1,localhost2 server-addr: 127.0.0.1:8848 file-extension: yaml application: name: shopping-trade-service profiles: #以什么結尾的文件 shopping-trade-service-dev.yml active: dev #讀取Nacos上的shopping-trade-service-dev.yml配置文件

寫注解(開發)
無
其他配置方式
bootstrap.xml文件
# bootstrap 會在加載application.yml之前先連接nacos,獲取遠程的配置,然后再進行初始化 # 因此bootstrap要配置的重點就是 # 1. nacos的地址: 獲取配置的入口 # 2. application的name: 根據SpringCloud的約定,是根據name-{profile}.yaml去讀取遠程配置文件的 spring: application: name: snapex-account-service cloud: nacos: config: #NACOS_HOST 是環境變量 #默認配置會默認自動刷新 #當配置了環境變量時使用環境變量,如果沒有配置時使用:后面的地址 server-addr: ${NACOS_HOST:192.168.199.57:8848} #命名空間,和Nacos控制臺的命名空間一致 #此處的命名空間指的是Nacos控制臺創建命名空間時命名空間ID namespace: ${NACOS_NAMESPACE:dev} file-extension: yaml group: DEFAULT_GROUP extension-configs: #配置中心配置的公共配置文件,yml后綴不能少,只支持yaml/properties #越靠后,優先級越高,優先級 database.yaml > commons.yaml - data-id: commons.yaml #commons.yaml所在的group group: DEFAULT_GROUP #是否動態的刷新 refresh: true - data-id: database.yaml group: DEFAULT_GROUP #是否動態的刷新 refresh: true discovery: server-addr: ${NACOS_HOST:192.168.199.57:8848} namespace: ${NACOS_NAMESPACE:dev2-dzq} group: DEFAULT_GROUP
application.xml文件
spring: profiles: #以什么結尾的文件 shopping-trade-service-dev.yml active: ${SPRING_PROFILES_ACTIVE:dev}
部分理論參考: 微服務:注冊中心的作用 (yii666.com)


浙公網安備 33010602011771號