Nacos注冊中心
環(huán)境隔離
給微服務(wù)配置namespace
給微服務(wù)配置namespace只能通過修改配置來實現(xiàn)。
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空間,填I(lǐng)D
重啟order-service后,訪問控制臺,可以看到下面的結(jié)果
此時訪問order-service,因為namespace不同,會導(dǎo)致找不到userservice,控制臺會報錯
Nacos與Eureka的區(qū)別
Nacos的服務(wù)實例分為兩種l類型:
- 臨時實例:如果實例宕機(jī)超過一定時間,會從服務(wù)列表剔除,默認(rèn)的類型。
- 非臨時實例:如果實例宕機(jī),不會從服務(wù)列表剔除,也可以叫永久實例。
配置一個服務(wù)實例為永久實例:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 設(shè)置為非臨時實例
Nacos和Eureka整體結(jié)構(gòu)類似,服務(wù)注冊、服務(wù)拉取、心跳等待,但是也存在一些差異
- Nacos與eureka的共同點
- 都支持服務(wù)注冊和服務(wù)拉取
- 都支持服務(wù)提供者心跳方式做健康檢測
- Nacos與Eureka的區(qū)別
- Nacos支持服務(wù)端主動檢測提供者狀態(tài):臨時實例采用心跳模式,非臨時實例采用主動檢測模式
- 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
- Nacos支持服務(wù)列表變更的消息推送模式,服務(wù)列表更新更及時
- Nacos集群默認(rèn)采用AP方式,當(dāng)集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式
Nacos配置管理
Nacos除了可以做注冊中心,同樣可以做配置管理來使用。
統(tǒng)一配置管理
當(dāng)微服務(wù)部署的實例越來越多,達(dá)到數(shù)十、數(shù)百時,逐個修改微服務(wù)配置就會讓人抓狂,而且很容易出錯。我們需要一種統(tǒng)一配置管理方案,可以集中管理所有實例的配置。
Nacos一方面可以將配置集中管理,另一方可以在配置變更時,及時通知微服務(wù),實現(xiàn)配置的熱更新。
在nacos中添加配置文件
如何在nacos中管理配置呢?
然后在彈出的表單中,填寫配置信息
注意:項目的核心配置,需要熱更新的配置才有放到nacos管理的必要。基本不會變更的一些配置還是保存在微服務(wù)本地比較好. 也就是說只有開關(guān)類的配置才需要配置到nacos
從微服務(wù)拉取配置
微服務(wù)要拉取nacos中管理的配置,并且與本地的application.yml配置合并,才能完成項目啟動。
但如果尚未讀取application.yml,又如何得知nacos地址呢?
因此spring引入了一種新的配置文件:bootstrap.yaml文件,會在application.yml之前被讀取
1)引入nacos-config依賴
首先,在user-service服務(wù)中,引入nacos-config的客戶端依賴:
<!--nacos配置管理依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)添加bootstrap.yaml
然后,在user-service中添加一個bootstrap.yaml文件,內(nèi)容如下:
spring:
application:
name: userservice # 服務(wù)名稱
profiles:
active: dev #開發(fā)環(huán)境,這里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后綴名
這里會根據(jù)spring.cloud.nacos.server-addr獲取nacos地址,再根據(jù)
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
作為文件id,來讀取配置。
3)讀取nacos配置
在user-service中的UserController中添加業(yè)務(wù)邏輯,讀取pattern.dateformat配置
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
此時在頁面訪問,就可以看到效果。
配置熱更新
我們最終的目的,是修改nacos中的配置后,微服務(wù)中無需重啟即可讓配置生效,也就是配置熱更新。
要實現(xiàn)配置熱更新,可以使用兩種方式:
方式一
在@Value注入的變量所在類上添加注解@RefreshScope
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-sDIML517-1659538060339)(file:///Users/apple/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/316595344/QQ/Temp.db/7D0D518D-83D6-4B02-877E-0AAA4CB821FC.png?msec=1659537757672)]
方式二
使用@ConfigurationProperties注解代替@Value注解。
在user-service服務(wù)中,添加一個類,讀取patterrn.dateformat屬性:
package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
配置共享
其實微服務(wù)啟動時,會去nacos讀取多個配置文件,例如:
-
[spring.application.name]-[spring.profiles.active].yaml
,例如:userservice-dev.yaml -
[spring.application.name].yaml
,例如:userservice.yaml
而[spring.application.name].yaml
不包含環(huán)境,因此可以被多個環(huán)境共享。
下面我們通過案例來測試配置共享
1)添加一個環(huán)境共享配置
我們在nacos中添加一個userservice.yaml文件
2)在user-service中讀取共享配置
在user-service服務(wù)中,修改PatternProperties類,讀取新添加的屬性:
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
private String envSharedValue;
}
在user-service服務(wù)中,修改UserController,添加一個方法:
@Slf4j
@RestController
@RequestMapping("/user")
//@RefreshScope // 熱更新 --> 配置讀取遠(yuǎn)程yaml
public class UserController {
@Autowired
private PatternProperties properties;
@GetMapping("prop")
public PatternProperties prop(){
return properties;
}
}
3)運行兩個UserApplication,使用不同的profile
修改UserApplication2這個啟動項,改變其profile值
UserApplication2的Active profiles -> test
這樣,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。
啟動UserApplication和UserApplication2
訪問http://localhost:8081/user/prop,結(jié)果
{"dateformat":"yyyy/MM/dd HH:mm:ss","envSharedValue":"多環(huán)境共享屬性值"}
訪問http://127.0.0.1:8082/user/prop,結(jié)果
{"dateformat":null,"envSharedValue":"多環(huán)境共享屬性值"}
可以看出來,不管是dev,還是test環(huán)境,都讀取到了envSharedValue這個屬性的值。實現(xiàn)配置共享。文章來源:http://www.zghlxwxcb.cn/news/detail-448854.html
4)配置共享的優(yōu)先級
當(dāng)nacos、服務(wù)本地同時出現(xiàn)相同屬性時,優(yōu)先級有高低之分:文章來源地址http://www.zghlxwxcb.cn/news/detail-448854.html
到了這里,關(guān)于【微服務(wù)】Nacos注冊中心(3):配置管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!