往期回顧
Nacos的安裝與配置
Spring Cloud集成Nacos作為注冊中心
LoadBalacer集成Nacos實(shí)現(xiàn)負(fù)載均衡
常見的負(fù)載均衡策略分析
Spring Cloud集成Dubbo實(shí)現(xiàn)RPC調(diào)用
前面我們已經(jīng)介紹了Nacos
的安裝與配置,Spring Cloud
集成Nacos
作為服務(wù)的注冊中心,集成Nacos
實(shí)現(xiàn)服務(wù)的負(fù)載均衡和一些常見的負(fù)載均衡策略以及使用Dubbo進(jìn)行RPC調(diào)用
接下來,我們將介紹如何使用Nacos
作為配置中心加載遠(yuǎn)程配制文件
配置中心
什么是配置中心?
配置中心,顧名思義,就是用來統(tǒng)一管理項目中所有配置的系統(tǒng)。
在微服務(wù)架構(gòu)中,當(dāng)系統(tǒng)從一個單體應(yīng)用,被拆分成分布式系統(tǒng)上一個個服務(wù)節(jié)點(diǎn)后,配置文件也必須跟著遷移(分割),這樣配置就分散了,不僅如此,分散中還包含著冗余。配置中心將配置從各應(yīng)用中剝離出來,對配置進(jìn)行統(tǒng)一管理,應(yīng)用自身不需要自己去管理配置。
如果一個中型的項目,不采用配置中心的模式,一大堆的各類配置項,各種不定時的修改需求,一定會讓開發(fā)同學(xué)非常頭疼且管理十分混亂。所以,我們需要使用配置中心對這些配置進(jìn)行集中管理。
一個合格的配置中心需要滿足如下特性:
- 配置項容易讀取和修改
- 分布式環(huán)境下應(yīng)用配置的可管理性,即提供遠(yuǎn)程管理配置的能力
- 支持對配置的修改的檢視以把控風(fēng)險
- 可以查看配置修改的歷史記錄
- 不同部署環(huán)境下應(yīng)用配置的隔離性
配置中心的作用
- 對配置文件進(jìn)行集中管理,在不同的環(huán)境下或者不同配置中,可以對配置文件進(jìn)行更新和部署
- 在程序的運(yùn)行期間,可以對程序中的配置文件進(jìn)行動態(tài)性調(diào)整。使用分布式配置中心,就不需要在每一臺服務(wù)器上都進(jìn)行配置文件的修改,只需要在總服務(wù)器中進(jìn)行修改,系統(tǒng)就會向其他的服務(wù)器進(jìn)行統(tǒng)一的修改配置
- 如果系統(tǒng)程序的配置發(fā)生了變動,無需要重新重啟服務(wù)器,就能夠自動感知相應(yīng)的變化,并將新的變化統(tǒng)一發(fā)送到相應(yīng)程序上
- 支持不同環(huán)境的隔離和切換
分布式配置中心作用有很多,這里僅僅簡單羅列了幾個最為常見的作用
Nacos Config
Nacos
提供用于存儲配置和其他元數(shù)據(jù)的 key/value 存儲,為分布式系統(tǒng)中的外部化配置提供服務(wù)器端和客戶端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 應(yīng)用的外部屬性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客戶端和服務(wù)器上的概念與 Spring Environment 和 PropertySource 有著一致的抽象,在特殊的 bootstrap 階段,配置被加載到 Spring 環(huán)境中。當(dāng)應(yīng)用程序通過部署管道從開發(fā)到測試再到生產(chǎn)時,您可以管理這些環(huán)境之間的配置,并確保應(yīng)用程序具有遷移時需要運(yùn)行的所有內(nèi)容。
Nacos是Spring Cloud組件Spring Cloud Config的替代方案
Spring Cloud Config 分為服務(wù)端和客戶端兩個部分。服務(wù)端被稱為分布式配置中心,它是個獨(dú)立的應(yīng)用,可以從配置倉庫獲取配置信息并提供給客戶端使用??蛻舳丝梢酝ㄟ^配置中心來獲取配置信息,在啟動時加載配置。Spring Cloud Config 的配置中心默認(rèn)采用Git來存儲配置信息,所以天然就支持配置信息的版本管理,并且可以使用Git客戶端來方便地管理和訪問配置信息
快速開始
1.啟動Nacos服務(wù)
如若還未啟動Nacos請參見 Nacos的安裝與配置
2.引入依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
這里我遇見了一個bug,詳細(xì)參見Param ‘serviceName‘ is illegal, serviceName is blank
這個bug出現(xiàn)的原因是我沒有導(dǎo)入bootstrap的依賴,導(dǎo)入以下依賴即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
3.修改配制文件
修改application.yml
,啟用的是dev環(huán)境的配置
spring:
profiles:
active: dev
server:
port: 8081
添加bootstrap.yml
,主要是對Nacos的作為配置中心的功能進(jìn)行配置:
spring:
application:
name: user-service
cloud:
nacos:
discovery:
server-addr: 192.168.199.128:8848 #Nacos地址
config:
server-addr: 192.168.199.128:8848 #Nacos地址
file-extension: yaml #這里我們獲取的yaml格式的配置
management:
endpoints:
web:
exposure:
include: "*"
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:cuit/epoch/pymjl/mapper/xml/*.xml
type-aliases-package: cuit.epoch.pymjl.entity
注意:
當(dāng)你使用域名的方式來訪問 Nacos 時,
spring.cloud.nacos.config.server-addr
配置的方式為域名:port
。例如 Nacos 的域名為abc.com.nacos,監(jiān)聽的端口為 80,則
spring.cloud.nacos.config.server-addr=abc.com.nacos:80
。 注意 80 端口不能省略。
4.創(chuàng)建Controller
@RefreshScope
可以使Nacos
客戶端運(yùn)行過程中可以獲取到配置中心配置的變化然后更新
package cuit.epoch.pymjl.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Pymjl
* @version 1.0
* @date 2022/8/31 20:15
**/
@RestController
@RefreshScope
@RequestMapping("/config")
public class ConfigController {
@Value("${config.info:default}")
private String info;
@GetMapping("/info")
public String getInfo() {
return info;
}
}
5.基于 dataid 為 yaml 的文件擴(kuò)展名配置方式
我們先來講下Nacos中的dataid的組成格式及與SpringBoot配置文件中的屬性對應(yīng)關(guān)系:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
比如說我們現(xiàn)在要獲取應(yīng)用名稱為user-service
的應(yīng)用在dev
環(huán)境下的yaml
配置,dataid如下:
user-service-dev.yaml
根據(jù)上面的命名方式在Nacos
控制臺添加如下配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.199.128:3306/cloud_learn?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
password: 123456
druid:
initialSize: 10
minIdle: 10
maxActive: 100
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
#通過別名的方式配置擴(kuò)展插件,常用的插件有:監(jiān)控統(tǒng)計用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
filters: stat,wall
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
useGlobalDataSourceStat: false
cache:
type: redis
redis:
host: 192.168.199.128
port: 6379
password: 123456
config:
info: This is Nacos config test
dubbo:
application:
name: ${spring.application.name}
logger: slf4j
protocol:
name: dubbo
port: -1
registry:
address: nacos://192.168.199.128:8848
config-center:
address: nacos://192.168.199.128:8848
metadata-report:
address: nacos://192.168.199.128:8848
consumer:
validation: true
timeout: 3000
check: false
loadbalance: roundrobin
scan:
base-packages: cuit.epoch.pymjl.controller
如圖所示:
spring-cloud-starter-alibaba-nacos-config 在加載配置的時候,不僅僅加載了以 dataid 為
${spring.application.name}.${file-extension:properties}
為前綴的基礎(chǔ)配置,還加載了dataid為${spring.application.name}-${profile}.${file-extension:properties}
的基礎(chǔ)配置。在日常開發(fā)中如果遇到多套環(huán)境下的不同配置,可以通過Spring 提供的
${spring.profiles.active}
這個配置項來配置。
開始測試
先啟動服務(wù),如圖,啟動成功
訪問接口測試
接下來我們更改在Nacos
中的配置,然后發(fā)布更新
config:
info: Changeing the nacos config
觀察Spring的控制臺輸出
再訪問剛才的接口
可見,配制文件完成了實(shí)時的動態(tài)更新,至此
關(guān)于Nacos的其他配置可參見官方文檔文章來源:http://www.zghlxwxcb.cn/news/detail-606200.html
ngeing the nacos config文章來源地址http://www.zghlxwxcb.cn/news/detail-606200.html
觀察Spring的控制臺輸出
[外鏈圖片轉(zhuǎn)存中...(img-RvY46qND-1662117389530)]
再訪問剛才的接口
[外鏈圖片轉(zhuǎn)存中...(img-5eS2GBg2-1662117389530)]
可見,配制文件完成了實(shí)時的動態(tài)更新,至此
關(guān)于Nacos的其他配置可參見[官方文檔](https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config)
項目源碼:[gitee](https://gitee.com/pymjl_0/cloud-learn) [github](https://github.com/Pymjl/cloud-learn)
到了這里,關(guān)于Spring Cloud集成Nacos作為配置中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!