如何用nacos搭建微服務(wù)注冊配置中心
前言
之前微服務(wù)的注冊配置用的是Eureka,因?yàn)镋ureka已經(jīng)停止更新了,所以這篇我們簡單聊一下阿里的Nacos,比較基礎(chǔ),僅供學(xué)習(xí)用。
一、Nacos是什么?
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實(shí)現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。摘自官網(wǎng)文檔(狗頭)。
Nacos官網(wǎng)文檔:Nacos文檔
二、部署Nacos
1.下載安裝
下載(圖例):
點(diǎn)擊上圖中的url會跳轉(zhuǎn)到GitHub,選擇對應(yīng)的Windows或者linux的版本下載即可,我這里使用的Windows系統(tǒng),下載.zip文件
2.啟動服務(wù)
下載解壓后對應(yīng)有bin、conf、log等目錄,我們進(jìn)去bin目錄直接雙擊擊startup.cmd文件啟動服務(wù)會發(fā)現(xiàn)報(bào)錯,因?yàn)閚acos還需要進(jìn)行部署
其部署方式有三種:單機(jī)模式、集群模式、多集群模式(來自官網(wǎng)文檔)
這里我們?yōu)榱撕唵蔚膶W(xué)習(xí)和使用,部署單機(jī)模式。
3.單機(jī)模式的部署
1)在自己的mysql數(shù)據(jù)庫中新建一個數(shù)據(jù)庫,名字為nacos
2)在nacos數(shù)據(jù)庫下執(zhí)行在剛解壓的conf目錄下的nacos-mysql.sql文件,會添加一些表
3)修改conf目錄下的application.properties,內(nèi)容如下(即連接mysql數(shù)據(jù)庫的連接配置):
### Count of DB: db.num=1 ### Connect URL of DB: db.url=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=root db.password=123456
4)修改bin目錄下的startup.cmd文件,內(nèi)容如下(修改nacos的部署模式為單機(jī)模式):
set MODE="standalone"
5)都配置完成后再次雙擊擊bin目錄下的startup.cmd啟動服務(wù)看是否能成功啟動,nacos的默認(rèn)端口是:8848,然后訪問http://localhost:8848/nacos/index.html并以用戶名密碼都為nacos登錄進(jìn)去就可以進(jìn)行服務(wù)的配置和注冊。
成功啟動截圖
成功訪問截圖
三、服務(wù)注冊
1.注冊生產(chǎn)者(用來提供遠(yuǎn)程訪問接口的服務(wù))
使用idea新建一個項(xiàng)目springboot項(xiàng)目,然后在項(xiàng)目下新建一個名為providerser模塊作為一個生產(chǎn)者微服務(wù),maven依賴如下:
<properties> <java.version>1.8</java.version> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <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>
在application.properties的配置如下:
##服務(wù)提供者server provider server.port=8081 spring.application.name=providerser ##nacos注冊中心地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 #允許其他服務(wù)通過注冊中心發(fā)現(xiàn)該服務(wù)# eureka.instance.prefer-ip-address= true
在啟動類上添加注解@EnableDiscoveryClient進(jìn)行服務(wù)注冊:
##服務(wù)提供者server provider @SpringBootApplication @EnableDiscoveryClient public class ProviderserApplication { public static void main(String[] args) { SpringApplication.run(ProviderserApplication.class, args); } }
新建一個controller類,在類中寫一個供遠(yuǎn)程訪問的接口(正常的接口即可):
@RestController @Slf4j @RequestMapping("/provider") public class ProviderController { @RequestMapping(value="/getUserList") public List<String> getUserList(){ log.info("開始調(diào)用start"); List<String> result=new ArrayList<>(); result.add("test1"); result.add("test2"); result.add("test3"); result.add("test4"); result.add("test5"); result.add("test6"); log.info("調(diào)用end"); return result; } }
成功啟動該模塊后會自動在nacos中注冊該服務(wù),在nacos的服務(wù)管理下的服務(wù)列表中可查看到,如圖:
2.注冊消費(fèi)者(用來遠(yuǎn)程訪問接口的服務(wù))
同樣在項(xiàng)目下新建一個名為consumerser模塊作為一個消費(fèi)者微服務(wù),maven依賴如下:
<properties> <java.version>1.8</java.version> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <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>
在application.properties的配置如下:
server.port=8082 spring.application.name=consumerser spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
在啟動類上添加注解@EnableDiscoveryClient進(jìn)行服務(wù)注冊,同時添加@EnableFeignClients注解(采用Feign進(jìn)行遠(yuǎn)程接口訪問):
@EnableFeignClients @SpringBootApplication @EnableDiscoveryClient public class ConsumerserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerserApplication.class, args); } }
寫遠(yuǎn)程訪問接口,類似service層,這里指向的是生產(chǎn)者對應(yīng)的接口(即遠(yuǎn)程訪問生產(chǎn)者的接口):
//這里寫遠(yuǎn)程調(diào)用服務(wù)注冊的服務(wù)名(spring.application.name中配置的內(nèi)容) @FeignClient(value="providerser") public interface UserApi { //這里寫要調(diào)用的遠(yuǎn)程服務(wù)接口 @RequestMapping(value = "/provider/getUserList",method = RequestMethod.POST) List<String> getFeignList(); }
寫遠(yuǎn)程訪問接口,controller層:
@RestController @RequestMapping(value = "/remoteApi") public class ConsumerController { @Autowired private UserApi UserApi; @RequestMapping("/getFeignList") public List<String> getFeignList(){ return this.UserApi.getFeignList(); } }
同樣的,成功啟動該模塊后會自動在nacos中注冊該服務(wù),在nacos的服務(wù)管理下的服務(wù)列表中同樣可查看到,如圖:
使用postman測試,調(diào)用消費(fèi)者微服務(wù)的接口,然后消費(fèi)者會遠(yuǎn)程調(diào)用生產(chǎn)者的接口返回的數(shù)據(jù):
四、配置管理
當(dāng)服務(wù)數(shù)量超過一定程度之后,如果需要在每個服務(wù)里面分別維護(hù)每一個服務(wù)的配置文件,運(yùn)維人員估計(jì)要哭了。
如下圖所示,你所有的配置文件都會在配置列表里面,我們這里配置好后,直接可以啟用一個訪問配置的服務(wù),通過接口獲取到對應(yīng)配置文件的所有內(nèi)容。
也可以直接進(jìn)入這個頁面進(jìn)行實(shí)時遠(yuǎn)程的更改。
1.管理配置
就不需要過多介紹了,直接在上圖對對應(yīng)的配置文件進(jìn)行增刪改查操作就ok。
點(diǎn)加號進(jìn)行配置,配置成功后如下圖:
2.訪問配置
在項(xiàng)目再下新建一個名為configser模塊作為一個配置文件訪問服務(wù),maven依賴如下:
<properties> <java.version>1.8</java.version> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>0.2.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <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>
在application.properties的配置如下:
spring.profiles.active=dev server.port=8083
新建一個文件bootstrap.properties,配置內(nèi)容如下:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.application.name=configser spring.cloud.nacos.config.file-extension=properties management.endpoints.web.exposure.include=*
寫訪問配置文件內(nèi)容的接口,controller層:
@RestController @RequestMapping("/config") //修改后能自動根據(jù)修改進(jìn)行刷新注解 @RefreshScope public class ConfigController { @Value("${useLocalCache}") private String useLocalCache; @RequestMapping("/get") public String getConfigSet(){ return useLocalCache; } }
使用postman測試,調(diào)用配置服務(wù)的接口,會返回之前在配置中心中配置好的數(shù)據(jù)useLocalCache的值,如圖:
總結(jié)
好的,對nacos的簡單介紹到此結(jié)束,我其實(shí)也是為了對微服務(wù)的進(jìn)一步的學(xué)習(xí)和加深理解!
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java8列表中通過stream流根據(jù)對象屬性去重的三種方式
這篇文章主要介紹了java8列表中通過stream流根據(jù)對象屬性去重的三種方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08Spring MVC創(chuàng)建項(xiàng)目踩過的bug
這篇文章主要介紹了Spring MVC創(chuàng)建項(xiàng)目踩過的bug,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫ava Map 按key排序和按Value排序的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08關(guān)于Java三大特性之多態(tài)的總結(jié)
這篇文章主要介紹了關(guān)于Java三大特性之多態(tài)的總結(jié),內(nèi)容詳細(xì),涉及多態(tài)的定義,存在條件,好處,分類及實(shí)現(xiàn)方式等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11mybatis-plus 通用字段自動化(如邏輯刪除和更新時間等)
這篇文章主要介紹了mybatis-plus 通用字段自動化(如邏輯刪除和更新時間等),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Java中創(chuàng)建線程的兩種方式詳細(xì)說明
這篇文章主要介紹了Java中創(chuàng)建線程的兩種方式詳細(xì)說明,Java使用java.lang.Thread類代表線程,所有的線程對象都必須是Thread類或其子類的實(shí)例,每個線程的作用是完成一定的任務(wù),實(shí)際上就是執(zhí)行一段程序流即一段順序執(zhí)行的代碼,需要的朋友可以參考下2023-11-11