前言
隨著 服務(wù)化
的普及, 你會發(fā)現(xiàn)越來越多的公司開始服務(wù)化的調(diào)整, 那么有哪些變化呢?
你會發(fā)現(xiàn), 原來一個接口就實現(xiàn)了一套邏輯功能, 而服務(wù)化后, 服務(wù)
拆分的維度更細(xì)了, 實現(xiàn)一個功能, 可能需要同時協(xié)同很多的服務(wù)接口!
服務(wù)的拆分維度更細(xì)當(dāng)然是有好處的, 服務(wù)間耦合度更低, 復(fù)用性更強, 但是隨之而來的是服務(wù)間配置及管理成本的上升!
所以, 為了解決這些服務(wù)治理成本, Nacos應(yīng)運而生.
Nacos 是阿里巴巴的開源項目,其核心定位是 動態(tài)服務(wù)發(fā)現(xiàn)太伊、配置和服務(wù)管理平臺
簡而言之 nacos兩個功能:
- 服務(wù)發(fā)現(xiàn)及管理
- 配置的管理
需要注意的是, Nacos本身是個獨立的服務(wù), 可以單獨部署!
下面, 我們來實踐下Nacos的部署,以及和Springboot的配合~
Docker 安裝Nacos
下載nacos鏡像
docker pull nacos/nacos-server
查看鏡像
docker images
以單機模式運行nacos
# 登錄密碼默認(rèn)nacos/nacos
# standalone代表著單機模式運行褐鸥,非集群模式
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
訪問Nacos
http://localhost:8848/nacos
配置Nacos
訪問地址:http://localhost:8848/nacos
默認(rèn)賬號: nacos
默認(rèn)密碼: nacos
進(jìn)入配置頁面
創(chuàng)建一個新命名空間(你可以理解為一個組)
默認(rèn)有個public公共空間, 我新建了sb-alibaba-nacos空間
創(chuàng)建完成后我們就可以直接開始服務(wù)的配置了
把服務(wù)的相關(guān)配置加入此即可.
我們新增sb-alibaba-nacos服務(wù)的兩套環(huán)境的配置, dev 和 test
dev (服務(wù)端口: 8081):
test(服務(wù)端口: 8082):
再新建一個通用的配置(實際情況就是很多服務(wù),大部分的配置是共用的, 少部分是自定義的,
nacos支持這樣的配置) common
點擊發(fā)布即可.
Springboot 整合 alibaba nacos
我們引入依賴
<properties>
<spring-cloud.version>Hoxton.SR4</spring-cloud.version>
<spring-cloud-alibaba-version>2.2.1.RELEASE</spring-cloud-alibaba-version>
</properties>
<dependencyManagement>
<dependencies>
<!--SpringCloud依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringCloud Alibaba依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--Nacos服務(wù)注冊/發(fā)現(xiàn)依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
這里特別強調(diào)下, 必須要引入和springboot匹配版本的springcloud依賴哦, 否則會啟動報錯
org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'nacosAutoServiceRegistration' defined in classpath resource....
大致的版本對應(yīng)關(guān)系如下
更詳細(xì)的請去https://start.spring.io/actuator/info
查詢!
這里, 咸魚為了使用新特性, 所以spring-boot使用2.2.6.RELEASE版本, 所以對應(yīng)的spring-cloud版本為Hoxton.SR4, spring-cloud-alibaba版本為2.2.1.RELEASE!
注意, 低版本的springboot會出現(xiàn)無法注冊分組功能
也就是項目啟動后, 當(dāng)你在項目的alibaba nacos配置文件里填寫了分組名稱時,
在nacos 服務(wù)管理頁面會發(fā)現(xiàn)分組名稱
并沒注冊上(也就是顯示為default
, 并不是我們指定的dev
)
配置springboot
要想springboot項目向nacos注冊以及從nacos讀取配置,我們就必須在項目中加上簡單的配置
首先在啟動類上加上注解@EnableDiscoveryClient
其次, 新建一個項目的配置文件bootstrap.properties
(nacos的配置就在此, springboot會優(yōu)先讀取bootstrap.properties
配置, 其次才是application.properties)
# 服務(wù)名, 會在nacos上顯示服務(wù)的名稱
spring.application.name=sb-alibaba-nacos
# 指定生效的配置為 dev
spring.profiles.active=dev
##################### Nacos基本配置
###### 1窟她、注冊中心配置
# Nacos注冊中心地址, 也就是nacos所在 ip:端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 配置注冊中心namespace id, 我們nacos創(chuàng)建空間時生成的唯一id
spring.cloud.nacos.discovery.namespace=070cc848-3106-49eb-a3be-3d5994701d96
# 指定注冊中心namespace的group, 這個group可以隨意指定, 會顯示在nacos上
spring.cloud.nacos.discovery.group=dev
##### 2、配置中心配置
# Nacos配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 指定讀取的配置文件后綴名, 我們nacos上新建配置時,配置的后綴格式
spring.cloud.nacos.config.file-extension=properties
# 指定命名空間, 必須指定id, 不能指定名稱
spring.cloud.nacos.config.namespace=070cc848-3106-49eb-a3be-3d5994701d96
# 指定Group
spring.cloud.nacos.config.group = sb-alibaba-nacos
#### 相同namespace耽梅,不同group下的服務(wù)共享配置
## common配置
spring.cloud.nacos.config.extension-configs[0].group=common
spring.cloud.nacos.config.extension-configs[0].data-id=common.properties
spring.cloud.nacos.config.extension-configs[0].refresh=true
### 日志配置
logging.level.com.alibaba.nacos.client.config=warn
spring.main.allow-bean-definition-overriding=true
最后,我們啟動springboot項目即可~
說明
注意, 從nacos讀取配置, 啟動業(yè)務(wù)服務(wù)后, 若修改了配置, 業(yè)務(wù)服務(wù)默認(rèn)不會實時生效的!
如果, 個別配置項你需要實時的生效, 也就是無需重啟業(yè)務(wù)服務(wù)就能生效, 請在項目中對應(yīng)讀取配置值的類上加上注解
@RefreshScope
項目地址
https://github.com/MrCoderStack/SpringBootDemo/tree/master/sb-alibaba-nacos