spring cloud如何集成nacos配置中心
spring cloud集成nacos配置中心
一、添加依賴
<properties> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> <nacos.version>0.9.0.RELEASE</nacos.version> </properties> <!-- 配置管理功能依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${nacos.version}</version> </dependency>
二、添加bootstrap.yml配置文件
(*nacos配置中心讀取不到application.yml)
spring: profiles: active: dev cloud: nacos: config: server-addr: 127.0.0.1:8848 # 配置中心-指定命名空間 namespace: babc3933-84ef-43c8-8171-af2ce2fbf6e4 # 指定配置文件後綴 file-extension: yaml #配置組 group: DEFAULT_GROUP
三、添加遠程配置
1. 使用已有命名空間或者添加命名空間
2. namespace:命名空間的ID
3. 新建配置DateId 規則如下:
${prefix}-${spring.profile.active}.${file-extension}
*註意帶文件後綴
4. 配置格式選擇yaml
5. 在配置內容中寫入配置
nacos作為SpringCloud配置中心
一、背景介紹
在分佈式系統中動態配置中,可以避免重復重啟服務,動態更改服務參數等。一句話非常重要。 另外一篇文章也是這樣說的,哈哈。 Nacos作為Spring 推薦的分佈式調度系統其也具備配置中心的功能, 我們也可以利用其作為配置中心,其client端主動定時發起與配置中心同步機制,實現動態配置的的更新。
環境依賴:
名稱 | 值 |
---|---|
JDK | 1.8 |
Consul | 1.5.2 |
SpringCloud | Greenwich.SR1 |
Nacos | 1.1.0 |
二、項目實戰
1) pom依賴(主要)
<properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> <spring-cloud-alibaba.version>0.9.0.RELEASE</spring-cloud-alibaba.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencyManagement> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2)配置文件
application.properties #0表示服務器隨機端口 server.port=8090 #本次演示的kv的默認值(老板默認給你0元) company.pay.money=0
bootstrap.properties
#服務名稱 spring.application.name=waiter-service #consul 地址 spring.cloud.consul.host=localhost #consul 端口 spring.cloud.consul.port=8500 spring.cloud.consul.discovery.prefer-ip-address=true #nacos config server 地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #nacos 配置中心功能,默認true spring.cloud.nacos.config.enabled=true #nacos config server 動態配置文件格式 spring.cloud.nacos.config.file-extension=yaml
3)動態參數接收類
@ConfigurationProperties("company.pay") @RefreshScope @Data @Component public class PayMoneyProperties { //key結尾部分,以小數點為間隔 Integer money ; }
備註:
- ConfigurationProperties 表示這個類關聯動態配置,“company.pay”表示key的前綴部分。
- @RefreshScope 表示動態刷新config server 值
- @Component 表示將該類加載到IOC容器中
在實戰中嘗試用@Value的方式獲取動態,隻能實現服務重啟後獲取動態的config server 的值
4)對外接口(便於直觀驗證)
方式一:
@RestController @RequestMapping("nacos) public class NacosConfigController { @Autowired private PayMoneyProperties payMoneyProperties ; @RequestMapping("/pay/money") public Object getConfig(HttpRequest request){ String money ="項目順利上線,老板開始發獎金:"; return money + payMoneyProperties.getMoney(); } }
方式二:
@RestController @RequestMapping("nacos") //啟用動態配置刷新 @RefreshScope public class NacosConfigController { //獲取配置的值 @Value("${company.pay.money}") private String moneyConfig; @RequestMapping("/pay/money") public Object getZkConfig(HttpRequest request){ String money ="項目順利上線,老板開始發獎金:"; return money +moneyConfig; } }
5)啟動項目
上圖可以通過日志看出config server 的連接信息,默認拉取nacos上 項目名稱.yaml 為Data ID 的文件。
6)nacos config server 還沒設置對應節點值時演示(獲取的是本地配置文件值)
備註:Spring boot 在加載配置順序:本地配置文件 –> Config Server –>application
7) nacos 中創建數據節點
請求地址:http://localhost:8848/nacos
創建數據:Data ID:waiter-service.yaml
註意:YAML數據中,通過空格、“:” 表示數據層級關系, 在設置這個值前,可以在網上校驗一下YAML內容的有效性;
8)驗證項目裡是有有收到動態配置
如下圖,表示已經通知到項目更新的值
在驗證接口中請求一下對應接口,發現值已經和nacos config server 中動態設置的值相同瞭
三、總結
1)nacos作為註冊中心相比 consul 、zookeeper 作為註冊中心,有瞭更友好的web頁面,支持監聽節點信息查詢、配置歷史版本查詢、修改對比 等功能
2)client 會定時拉取nacos config server 值,與本地值對比
推薦閱讀:
- spring cloud config和bus組件實現自動刷新功能
- springboot使用nacos的示例詳解
- Springboot深入講解nocos的整合與使用
- SpringCloud整合Consul的實現
- Spring Cloud Consul的服務註冊與發現