新聞中心
什么是微服務(wù)
在了解Nacos之前,我們先來了解一下,什么是微服務(wù)?在2014年的時(shí)候,一位叫Martin Fowler(馬丁·福勒 )的大神,提出了微服務(wù)的概念,定義:微服務(wù)是由單一應(yīng)用程序構(gòu)成的小小服務(wù),擁有獨(dú)立的進(jìn)程和輕量化處理,服務(wù)依據(jù)業(yè)務(wù)功能設(shè)計(jì),用全自動(dòng)的方式進(jìn)行部署,能夠和其他服務(wù)使用HTTP API 進(jìn)行通信,同時(shí)服務(wù)會(huì)使用最小的規(guī)模進(jìn)行集中管理,服務(wù)可以用不同的編程語言與數(shù)據(jù)庫等組件實(shí)現(xiàn)。

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出巴南免費(fèi)做網(wǎng)站回饋大家。
架構(gòu)的演變
記得小農(nóng)剛工作的時(shí)候,那時(shí)候的服務(wù)大多是單體應(yīng)用,可能完善一點(diǎn)的,會(huì)部署集群,就是一個(gè)完整的項(xiàng)目部署多臺(tái)機(jī)器,那么隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站應(yīng)用的承載量和規(guī)模也在不斷的擴(kuò)大,從而導(dǎo)致我們的系統(tǒng)架構(gòu)也在不斷的進(jìn)行變化,從互聯(lián)網(wǎng)早期到如今,系統(tǒng)架構(gòu)大體經(jīng)歷了(單體 ——> 垂直——>分布式——>SOA——>微服務(wù)),如下圖所示:
1、單體架構(gòu)
在最開始的時(shí)候,大多數(shù)服務(wù)都是單體架構(gòu),就是把所有的功能點(diǎn)集中在一個(gè)項(xiàng)目(應(yīng)用)里面,統(tǒng)一開發(fā)部署,這種開發(fā)、部署以及維護(hù)成本都比較低。
- 這種的好處,就是其項(xiàng)目架構(gòu)簡(jiǎn)單,上手容易,適合用戶量少的項(xiàng)目,開發(fā)成本比較低,因?yàn)槎疾渴鹪谝粋€(gè)節(jié)點(diǎn)上,維護(hù)也方便。
- 缺點(diǎn)就是,所有的功能都集中在一個(gè)項(xiàng)目工程里面,隨著業(yè)務(wù)的發(fā)展,代碼和功能會(huì)越來越多,難以支撐一個(gè)大的項(xiàng)目進(jìn)行開發(fā)和維護(hù),項(xiàng)目之間模塊耦合度高,容錯(cuò)性低,對(duì)于不同的功能模塊優(yōu)化和擴(kuò)展性低。
2、垂直應(yīng)用架構(gòu)
所謂的垂直應(yīng)用架構(gòu),就是從單體應(yīng)用變成多個(gè)應(yīng)用,用來提升效率,比如供應(yīng)鏈系統(tǒng)可以拆分為:商品系統(tǒng)、訂單系統(tǒng)、履約系統(tǒng)、門戶系統(tǒng)、采購系統(tǒng)等等。
- 其優(yōu)點(diǎn)就是,項(xiàng)目拆分后實(shí)現(xiàn)了流量的分擔(dān),一定程度上解決并發(fā)問題,針對(duì)不同的業(yè)務(wù)模塊可以進(jìn)行優(yōu)化和水平拓展,同時(shí)不同系統(tǒng)之間不會(huì)互相影響,提高容錯(cuò)率。
- 缺點(diǎn):系統(tǒng)之間互相存在,無法進(jìn)行相互調(diào)用,系統(tǒng)之間互相獨(dú)立,會(huì)造成一部分功能的冗余。
3、分布式系統(tǒng)
隨著業(yè)務(wù)的增加,在垂直應(yīng)用架構(gòu)中冗余的代碼越來越多,需要將冗余的代碼抽離出來,統(tǒng)一做成單獨(dú)的業(yè)務(wù)層進(jìn)行處理,變成一個(gè)單獨(dú)的服務(wù),控制層調(diào)用不用的業(yè)務(wù)層服務(wù)完成不同的業(yè)務(wù)功能。具體可以理解為一個(gè)項(xiàng)目拆分成表現(xiàn)層和服務(wù)層兩個(gè)部分,服務(wù)層實(shí)現(xiàn)業(yè)務(wù)邏輯,表現(xiàn)層處理頁面交互。
- 優(yōu)點(diǎn):抽取公共的功能作為服務(wù)層,能夠提高代碼的復(fù)用率。
- 缺點(diǎn):系統(tǒng)之間的耦合度高,調(diào)用關(guān)系復(fù)雜。
4、SOA架構(gòu)
分布式系統(tǒng)中的缺點(diǎn)就是其調(diào)用復(fù)雜,當(dāng)我們的服務(wù)越來越多或者當(dāng)某一個(gè)服務(wù)壓力過大需要進(jìn)行水平拓展和負(fù)載均衡,對(duì)于資源的調(diào)度和治理就需要用到SOA(Service Oriented Architecture)為核心來解決,治理中心還可以幫助我們解決服務(wù)之間協(xié)議不同的問題。
- 優(yōu)點(diǎn):使用治理中心(ESB\dubbo)能夠解決服務(wù)之間調(diào)用管理的自動(dòng)調(diào)用。
- 缺點(diǎn):服務(wù)之間會(huì)有一定的依賴關(guān)系,如果說某個(gè)環(huán)節(jié)錯(cuò)誤會(huì)影響較大,服務(wù)關(guān)系復(fù)雜,運(yùn)維部署困難。
5、微服務(wù)架構(gòu)
微服務(wù)架構(gòu)在某種程序上來說是SOA架構(gòu)往下發(fā)展的下一步,它更加強(qiáng)服務(wù)的“徹底拆分”,目的就是提高效率,微服務(wù)架構(gòu)中,每個(gè)服務(wù)必須獨(dú)立部署同時(shí)互不影響,微服務(wù)架構(gòu)更加輕巧、輕量級(jí)。
微服務(wù)架構(gòu)與SOA架構(gòu)的不同之處
- 微服務(wù)架構(gòu)處理更精細(xì),某個(gè)模塊只處理對(duì)應(yīng)的功能,讓專業(yè)的人做專業(yè)的事。
- 每個(gè)服務(wù)都獨(dú)立部署,服務(wù)之間互相不影響。
- 在SOA架構(gòu)中可能會(huì)數(shù)據(jù)庫存儲(chǔ)發(fā)生共享,而微服務(wù)強(qiáng)調(diào)每個(gè)服務(wù)都是獨(dú)立數(shù)據(jù)庫,保證每個(gè)服務(wù)之間的連接互不影響。
- 微服務(wù)項(xiàng)目架構(gòu)比SOA架構(gòu)更適合互聯(lián)網(wǎng)公司(迅捷開發(fā)、更效率的版本迭代、更細(xì)粒度)。
微服務(wù)在生活中的體驗(yàn)
都說藝術(shù)來源于生活,那么技術(shù)也同樣來自于生活!請(qǐng)舉例說明例如:我們?nèi)]串的時(shí)候,一般只有一兩個(gè)人,集收銀、招待、廚師于一體,而當(dāng)我們?nèi)ゾ频甑臅r(shí)候,會(huì)有專門的接待服務(wù)員、收銀員、廚師、洗碗工等等,讓專業(yè)的人做專業(yè)的事!
微服務(wù)的好處在于,能夠?qū)⒎?wù)進(jìn)行原子化拆分,獨(dú)立進(jìn)行打包、部署和升級(jí),能夠保證微服務(wù)之間清晰的任務(wù)劃分,有利于擴(kuò)展,但是微服務(wù)分布式系統(tǒng)開發(fā)的技術(shù)成本比較高,比如要考慮容錯(cuò)、分布式鎖、分布式事務(wù)等等,復(fù)雜性更高。
Nacos 簡(jiǎn)介
Nacos (Naming Configuration Service) 歸屬于 Spring Cloud Alibaba 技術(shù)棧下,集動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺(tái),用于構(gòu)建元原生應(yīng)用程序。其中 服務(wù)發(fā)現(xiàn)是微服務(wù)架構(gòu)中的最關(guān)鍵的組件之一 ,Nacos提供了一組簡(jiǎn)單易用的特性,可以幫助我們更快速的實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置、元數(shù)據(jù)及流量管理。
什么是Nacos
注冊(cè)中心 + 配置中心 = Nacos。
為啥使用Nacos?
注冊(cè)中心對(duì)比
CAP模型
在這里我們不得不提到一個(gè)很重要的理論,就是CAP模型,這也是分布式系統(tǒng)設(shè)計(jì)中考慮的三個(gè)核心要素:
- 一致性(Consistency):同一時(shí)刻的同一請(qǐng)求的實(shí)例返回結(jié)果相同,所有的數(shù)據(jù)要求具有強(qiáng)一致性。
- 可用性(Availability):所有實(shí)例的讀寫請(qǐng)求在一定時(shí)間內(nèi)可以得到正確的響應(yīng)。
- 分區(qū)容錯(cuò)性(Partition tolerance):在網(wǎng)絡(luò)異常(光纜斷裂、設(shè)備故障、宕機(jī))的情況下,系統(tǒng)任然能夠提供正常的服務(wù)。
以上就是CAP原則(又稱CAP定理),但是以上三種情況不可能同時(shí)滿足,分布式系統(tǒng)設(shè)計(jì)在考慮滿足P(分區(qū)容錯(cuò)性)的前提下選擇C(一致性)還是A(可用性),也就是我們熟悉的 AP 和 CP。
CP原則(分區(qū)容錯(cuò)性+一致性)
CP原則屬于強(qiáng)一致性原則,要求所有節(jié)點(diǎn)可以查詢的數(shù)據(jù)隨時(shí)都要保持一致,若干個(gè)節(jié)點(diǎn)形成一個(gè)邏輯的共享區(qū)域,某一個(gè)節(jié)點(diǎn)更新的數(shù)據(jù)都會(huì)立即同步到其他數(shù)據(jù)節(jié)點(diǎn)之中,當(dāng)數(shù)據(jù)同步完成之后才能返回成功的結(jié)果,但是在實(shí)際的運(yùn)行過程中網(wǎng)絡(luò)的故障在所難免,如果這個(gè)時(shí)候若干個(gè)服務(wù)節(jié)點(diǎn)之間無法通訊時(shí)就會(huì)出現(xiàn)錯(cuò)誤,犧牲可用性原則(A)。
AP原則(分區(qū)容錯(cuò)性+可用性)
AP原則屬于弱一致性原則,在集群中只要有存活的節(jié)點(diǎn),那么所發(fā)來的所有請(qǐng)求都可以得到正確的詳情,在進(jìn)行數(shù)據(jù)同步處理操作中即便某些節(jié)點(diǎn)沒有成功的實(shí)現(xiàn)數(shù)據(jù)同步也返回成功,這樣就犧牲了一致性原則(C),可以應(yīng)用在網(wǎng)絡(luò)環(huán)境不是很好的場(chǎng)景當(dāng)中。
對(duì)于Nacos而言,支持CP和AP兩種模式的動(dòng)態(tài)切換,默認(rèn)為AP
切換命令:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
Nacos 類似于我們酒店的前臺(tái),首先酒店里面的房間打掃干凈以后并且符合入住條件的房間會(huì)注冊(cè)到服務(wù)臺(tái),這樣當(dāng)有客人來就酒店住店,只需要通過前臺(tái)去查找到可以入駐的房間即可,不需要進(jìn)行等待,可以快速的入住到酒店。
- 【房間 ——> 服務(wù)】
- 【服務(wù)臺(tái) ——> Nacos】
- 【客人 ——> 用戶】
服務(wù)器提供的注冊(cè)和發(fā)現(xiàn)機(jī)制可以幫助客人更快速的找到合適的房間。如果沒有一個(gè)沒有服務(wù)前臺(tái)的酒店,客人入駐的時(shí)候需要自己尋找合適的房間,因?yàn)榭腿瞬恢烂總€(gè)房間的情況,無法確定哪個(gè)房間是服務(wù)入住條件的房間,客人只能一個(gè)一個(gè)去找,費(fèi)時(shí)費(fèi)力,同時(shí)這也是不合理的。
在微服務(wù)中,軟件服務(wù)各自獨(dú)立,但是最終是作為一個(gè)整體來服務(wù)于客戶,軟件之間也需要彼此通信和方法調(diào)用,微服務(wù)架構(gòu)內(nèi)部發(fā)起通訊調(diào)用方法的一方,我們稱之為 “服務(wù)消費(fèi)者”,提供遠(yuǎn)程方法的服務(wù)器稱之為 “服務(wù)提供者”。
往往為了提高系統(tǒng)性能,會(huì)提供多個(gè)服務(wù)器作為 服務(wù)提供者 ,這個(gè)時(shí)候服務(wù)消費(fèi)者找服務(wù)提供者的過程,就類似于用戶在找房間的過程,為了幫助 服務(wù)消費(fèi)者 快速的發(fā)現(xiàn) 服務(wù)提供者,在微服務(wù)框架中都會(huì)引入注冊(cè)中心。
注冊(cè)中心就類似于酒店的前臺(tái),提供在軟件服務(wù)的注冊(cè)和發(fā)現(xiàn)功能,服務(wù)提供者 會(huì)先在注冊(cè)中心進(jìn)行注冊(cè),聲明可以進(jìn)行對(duì)外提供服務(wù),而服務(wù)消費(fèi)者只需要通過注冊(cè)中心找到可以使用的服務(wù),就可以快速使用服務(wù)了,注冊(cè)中心實(shí)現(xiàn)了服務(wù)提供和服務(wù)消費(fèi)的快速配合的功能。
Nacos 搭建
- 官網(wǎng)地址:??https://nacos.io/zh-cn/index.html。??
- 文檔地址:??https://nacos.io/zh-cn/docs/quick-start.html。??
- 下載地址:??https://github.com/alibaba/nacos/releases。??
一般推薦的是我們使用穩(wěn)定版,官方也會(huì)在文檔中說明:
下載之后解壓后就可以使用:
執(zhí)行命令:linux/Mac:
sh startup.sh -m standalone。
Windows:
startup.cmd -m standalone。
PS:注意nacos的文件路徑一定要是英文,否則啟動(dòng)會(huì)報(bào)錯(cuò)。
nacos默認(rèn)使用的數(shù)據(jù)庫為內(nèi)嵌的cmdb,我們也可以創(chuàng)建本地?cái)?shù)據(jù)庫并修改配置文件指向本地?cái)?shù)據(jù)庫即可(推薦)。
啟動(dòng)成功以后,我們?cè)L問:http://localhost:8848/nacos。
用戶名密碼默認(rèn)為:nacos/nacos 如下圖所示表示我們啟動(dòng)成功!
Nacos 服務(wù)端的搭建
Nacos注冊(cè)中心
服務(wù)發(fā)現(xiàn)是微服務(wù)架構(gòu)中的關(guān)鍵組件之一。在這樣的架構(gòu)中,手動(dòng)為每個(gè)客戶端配置服務(wù)列表可能是一項(xiàng)艱巨的任務(wù),并且使動(dòng)態(tài)擴(kuò)展變得極其困難。Nacos Discovery 幫助您將服務(wù)自動(dòng)注冊(cè)到 Nacos 服務(wù)器,Nacos 服務(wù)器會(huì)跟蹤服務(wù)并動(dòng)態(tài)刷新服務(wù)列表。此外,Nacos Discovery 將服務(wù)實(shí)例的一些元數(shù)據(jù),如主機(jī)、端口、健康檢查 URL、主頁等注冊(cè)到 Nacos。
官方API文檔:https://spring.io/projects/spring-cloud-alibaba#learn。
有的同學(xué)會(huì)說,小農(nóng)我english不太好,別擔(dān)心,現(xiàn)在瀏覽器上不是有翻譯嗎,直接翻譯!
創(chuàng)建項(xiàng)目
我們需要?jiǎng)?chuàng)建一個(gè)聚合工程,這樣如果需要添加新的Nacos服務(wù),直接添加子模塊就可以新建父類項(xiàng)目:spring-cloud-alibaba。
新建子類項(xiàng)目:cloud-alibaba-nacos-9001。
POM
父類項(xiàng)目
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2021.0.1.0
pom
import
在子項(xiàng),引入 Nacos Discovery 進(jìn)行服務(wù)注冊(cè)/發(fā)現(xiàn)
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
YML
server:
port: 9001
spring:
application:
name: nacos-provider
cloud:
discovery:
server-addr: localhost:8848
management:
endpoint:
web:
exposure:
include: '*'
啟動(dòng)類:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //需要添加這個(gè)注解
public class CloudAlibabaNacos9001Application {
public static void main(String[] args) {
SpringApplication.run(CloudAlibabaNacos9001Application.class, args);
}
}
測(cè)試類:
/**
* @program: spring-cloud-alibaba
* @ClassName DemoController
* @description:
* @author: 牧小農(nóng)
* @create: 2022-03-27 17:08
* @Version 1.0
**/
@RestController
public class DemoController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/muxiaonong")
public String getServerPort(){
return "hello Nacos Discovery"+serverPort;
}
}
當(dāng)我們啟動(dòng)服務(wù)以后,就可以看到在服務(wù)列表中,看到我們啟動(dòng)服務(wù)。
參考 cloud-alibaba-nacos-9001 新建一個(gè)的服務(wù) cloud-alibaba-nacos-9002。
Nacos消費(fèi)者負(fù)載均衡
新建子類項(xiàng)目:cloud-alibab-consumer-8083。
pom
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
com.muxiaonong
spring-cloud-alibaba
0.0.1-SNAPSHOT
com.muxiaonong
cloud-alibab-consumer-8083
0.0.1-SNAPSHOT
cloud-alibab-consumer-8083
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.springframework.cloud
spring-cloud-starter-loadbalancer
3.1.0
同時(shí)我們也需要在父類項(xiàng)目中添加子類說明
cloudalibaba-nacos-9001
cloudalibaba-nacos-9002
cloudalibab-consumer-nacos-8083
yml
server:
port: 8083
spring:
application:
name: nacos-consumer
cloud:
discovery:
server-addr: localhost:8848
啟動(dòng)類
@SpringBootApplication
@EnableDiscoveryClient
public class CloudAlibabConsumer8083Application {
public static void main(String[] args) {
SpringApplication.run(CloudAlibabConsumer8083Application.class, args);
}
}
- nacos-provider:服務(wù)注冊(cè)者。
- nacos-consumer:服務(wù)消費(fèi)者。
服務(wù)間的調(diào)用
如果我們想要我們創(chuàng)建服務(wù)的消費(fèi)者去調(diào)用服務(wù)提供者,就需要通過Ribbon進(jìn)行調(diào)用。
什么是Ribbon
Spring Cloud Ribbon 是一個(gè)基于HTTP和TCP客戶端負(fù)載均衡器,基于Netflix Ribbon實(shí)現(xiàn),通過Spring Cloud的封裝,可以讓我們很方便的將面向服務(wù)的Rest模板請(qǐng)求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡服務(wù)調(diào)用,雖然它知識(shí)一個(gè)工具類庫,不需要進(jìn)行獨(dú)立部署,它幾乎存在于每一個(gè)Spring Cloud 構(gòu)建的微服務(wù)和基礎(chǔ)設(shè)施中,對(duì)于服務(wù)間的調(diào)用,AP網(wǎng)關(guān)的請(qǐng)求轉(zhuǎn)發(fā)都需要經(jīng)過Ribbon負(fù)載均衡來實(shí)現(xiàn),而Ribbon的主要作用是:從注冊(cè)服務(wù)器端拿到對(duì)應(yīng)的服務(wù)列表后用負(fù)載均衡的方式訪問對(duì)應(yīng)的服務(wù)。
因?yàn)镹acos已經(jīng)整合了Ribbon,所以我們?nèi)绻胍褂茫恍枰獙?dǎo)入Spring Cloud Alibaba Nacos的依賴就可以直接使用了。
這個(gè)需要注意的是nacos自從2020版本之后不再整合的是Netflix,也就沒有ribbon了,如果報(bào)錯(cuò)說找不到服務(wù)是因?yàn)?,你使用了?fù)載均衡算法,但是沒有ribbon了,它不知道該使用哪個(gè)服務(wù)。所以這里只需要導(dǎo)入spring-cloud-starter-loadbalancer依賴即可。
org.springframework.cloud
spring-cloud-starter-loadbalancer
3.1.0
Ribbon的基礎(chǔ)使用
對(duì)于Ribbon進(jìn)行遠(yuǎn)程調(diào)用,我們通常使用 RestTemplate,其中g(shù)etForObject是最常用方法,我們只需要在啟動(dòng)類中添加 RestTemplate就可以正常使用。
@Bean
@LoadBalanced //nacos集成了ribbon
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
當(dāng)body是一個(gè)對(duì)象時(shí),可以直接這樣實(shí)現(xiàn):
User result = restTemplate.getForObject(uri, User.class);
不需要關(guān)注請(qǐng)求響應(yīng)除body外的其他內(nèi)容時(shí),該函數(shù)就非常好用,可以少一個(gè)從Response中獲取body的步驟。提供了三種不同的重載實(shí)現(xiàn)
- url:表示被調(diào)用的目標(biāo)Rest接口位置,多個(gè)服務(wù)提供者注冊(cè)相同名稱,Ribbon會(huì)自動(dòng)尋找其中一個(gè)服務(wù)提供者,并且調(diào)用接口方法。這個(gè)就是負(fù)載均衡功能。
- responseType:返回值類型,JavaBean類型或者JavaBean數(shù)組類型。
- urlVariables:傳遞給url的動(dòng)態(tài)參數(shù),使用參數(shù)時(shí)候需要在url上需要使用{1}、{2}、{3}進(jìn)行參數(shù)占位,這樣傳遞的參數(shù)就會(huì)自動(dòng)替換占位符。
getForObject(String url, Class responseType, Object ... urlVariables)。
getForObject(String url, Class responseType, Map urlVariables)。
getForObject(URI url, Class responseType)。
Nacos負(fù)載均衡
如果想讓我們的消費(fèi)者consuomer去調(diào)用服務(wù)提供者9001和9002,就是使用到我們的負(fù)載均衡了。
yml
server:
port: 8083
spring:
application:
name: nacos-consumer
cloud:
discovery:
server-addr: localhost:8848
# 服務(wù)提供者的名稱
service-url:
nacos-user-service: http://nacos-provide
啟動(dòng)類上配置restTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
測(cè)試類
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* @program: spring-cloud-alibaba
* @ClassName DemoController
* @description:
* @author: 牧小農(nóng)
* @create: 2022-04-04 16:11
* @Version 1.0
**/
@RestController
public class DemoController {
@Autowired
private RestTemplate restTemplate;
//訪問服務(wù)名
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/nacos")
public String getDiscovery(){
System.out.println(serverURL);
return restTemplate.getForObject(serverURL+"/muxiaonong",String.class);
}
當(dāng)我們輸入:http://localhost:8083/consumer/nacos,就可以看到9001和9002對(duì)應(yīng)的切換顯示了 。
Nacos配置中心
上面我們有講 注冊(cè)中心 + 配置中心 = Nacos ,前面我們將了注冊(cè)中心,現(xiàn)在我們來講一講如何使用Nacos作為他的配置中心。
為什么使用Nacos配置中心
1、配置屬性的動(dòng)態(tài)刷新。
2、配置文件的集中管理。
我們新建一個(gè)子項(xiàng):cloud-alibaba-config-3377。
pom文件:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
YML配置:
在這里我們需要配置兩個(gè),一個(gè)是讓當(dāng)前項(xiàng)目注冊(cè)到Nacos中,另外一個(gè)是去Nacos中讀取指定后綴的配置文件。
bootstrap.yml
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務(wù)注冊(cè)中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
application.yml
spring:
profiles:
active: dev
啟動(dòng)類同樣添加 @EnableDiscoveryClient注解。
測(cè)試類:
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.RestController;
/**
* @program: spring-cloud-alibaba
* @ClassName DemoController
* @description:
* @author: 牧小農(nóng)
* @create: 2022-04-10 16:02
* @Version 1.0
**/
@RestController
@RefreshScope //支持Nacos的動(dòng)態(tài)刷新功能
public class DemoController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
Nacos的配置規(guī)則
官網(wǎng):??https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html。??
在Nacos Spring Cloud 中,dataId的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默認(rèn)為 spring.application.name 的值,也可以通過配置項(xiàng) spring.cloud.nacos.config.prefix來配置。
- spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,詳情可以參考 Spring Boot文檔。注意:當(dāng) spring.profiles.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}。
- file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項(xiàng) spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。
${spring.application.name}-${spring.profiles.active}.${file-extension}
nacos-config-client-dev.yaml
微服務(wù)名稱-當(dāng)前環(huán)境-文件格式
接下來而我們只需要在Nacos平臺(tái)上去創(chuàng)建配置系項(xiàng)即可。
修改Nacos配置,不需要重啟項(xiàng)目即可自動(dòng)刷新。
通過鏈接訪問即可。
文章名稱:這篇Nacos使用詳解,可以收藏一下
文章位置:http://fisionsoft.com.cn/article/dhgojhe.html


咨詢
建站咨詢
