分佈式配置中心可以實現不需要重啓我們的服務器,動態的修改我們的配置文件內容,常見的配置中心有攜程的阿波羅、SpringCloud Config、Nacos輕量級的配置中心等。
Nacos支持三種部署模式,分別爲:
- 單機模式 - 用於測試和單機試用。
- 集羣模式 - 用於生產環境,確保高可用。
- 多集羣模式 - 用於多數據中心場景
官方文檔網址:https://nacos.io/zh-cn/docs/deployment.html,多集羣一般涉及到多機房問題,一般我們用不到,即使用到了也是bat等級別的一線互聯網公司,所以我們只講解單機模式和集羣模式。
【Nacos單體模式】
①. 發佈:進入http://localhost:8848/nacos,配置管理 - 配置列表 - 點擊右上角的加號 - 填寫參數,點擊發布即可
②. 客戶端service-impl-order讀取配置:
service-impl引入實現類公共依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
新建bootstrap.yml配置:
# 【application.yml】
server:
port: 8090
# 【bootstrap.yml】
spring:
application:
# 服務名稱
name: service-order
cloud:
nacos:
discovery:
# nacos註冊地址
server-addr: 127.0.0.1:8848
config:
# 配置中心連接地址
server-addr: 127.0.0.1:8848
# 分組
group: DEFAULT_GROUP
# 類型
file-extension: properties
編寫測試接口:
@RestController
public class OrderService {
@Value("${xyy.age}")
private String age;
@GetMapping("/getAge")
public String getAge(){
return age;
}
}
可以發現,我們的SpringBoot項目並沒有配置xyy.age,而是直接去Nacos讀取了配置。
③. 實時刷新
需要在用到@Value("${}")註解的類上添加註解@RefreshScope,那麼是不是以後每個controller都需要加該註解?
答案是不用的,只需要把需要用到的該註解的屬性封裝到一個公共類中,在這個類上加入該註解即可,其它需要調用的地方直接調公共類即可。
重啓訂單服務,getAge接口返回結果爲22,此時在Nacos門戶把xyy.age改爲23,則不重啓服務,再次訪問getAge接口,會發現返回結果爲23。
④ 版本控制
與SpringBoot一樣,直接在配置文件末尾加入dev/prd即可;新建兩個配置文件分別爲service-order-dev.properties,service-order-prd.properties,xyy.age分別爲20,30,此時分別在bootstrap指定dev,prd,會發現返回結果是有區別的。
⑤ yml,properties區分
新建service-order-prd.yaml,在bootstrap.yml指定file-extension爲yaml,重啓服務,返回結果變爲18。
【Nacos集羣模式】
1. 新建數據庫nacos_config,導入nacos/conf下的nacos-mysql.sql,(數據庫版本有要求)。
在application.proerties加入下面配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
修改cluster.conf.example爲cluster.conf並修改配置爲:
拷貝3個上述配置,並修改application.properties的server.port分別爲8848,8849,8850。
2. Nginx實現Nacos負載均衡
host配置文件:
Nginx配置文件:
啓動Nginx,訪問http://nacos.xyy.com/nacos即可訪問到Nacos的Portal網站。
SpringCloudAlibaba集羣方式連接,修改bootstrap.yml文件如下: