轉(zhuǎn)載請標明出處:
https://blog.csdn.net/forezp/article/details/90142744
本文出自方志朋的博客
什么是Nacos?
Nacos 致力于幫助您發(fā)現(xiàn)筒严、配置和管理微服務(wù)挖滤。Nacos 提供了一組簡單易用的特性集皮钠,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)捉蚤、服務(wù)配置化借、服務(wù)元數(shù)據(jù)及流量管理周偎。
是Spring Cloud A 中的服務(wù)注冊發(fā)現(xiàn)組件陶舞,類似于Consul嗽测、Eureka,同時它又提供了分布式配置中心的功能肿孵,這點和Consul的config類似唠粥,支持熱加載。
Nacos 的關(guān)鍵特性包括:
- 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測
- 動態(tài)配置服務(wù)停做,帶管理界面晤愧,支持豐富的配置維度。
- 動態(tài) DNS 服務(wù)
- 服務(wù)及其元數(shù)據(jù)管理
Nacos下載
Nacos依賴于Java環(huán)境蛉腌,所以必須安裝Java環(huán)境官份。然后從官網(wǎng)下載Nacos的解壓包,安裝穩(wěn)定版的烙丛,下載地址:https://github.com/alibaba/nacos/releases
本次案例下載的版本為1.0.0 贯吓,下載完成后,解壓蜀变,在解壓后的文件的/bin目錄下悄谐,windows系統(tǒng)點擊startup.cmd就可以啟動nacos。linux或mac執(zhí)行以下命令啟動nacos库北。
sh startup.sh -m standalone
啟動時會在控制臺爬舰,打印相關(guān)的日志们陆。nacos的啟動端口為8848,在啟動時要保證端口不被占用。珠穆拉馬峰的高度是8844情屹,nacos的端口是8848坪仇,有點巧合。
啟動成功垃你,在瀏覽器上訪問:http://localhost:8848/nacos椅文,會跳轉(zhuǎn)到登陸界面,默認的登陸用戶名為nacos惜颇,密碼也為nacos皆刺。
登陸成功后,展示的界面如下:
從界面可知凌摄,此時沒有服務(wù)注冊到Nacos上羡蛾。
使用Nacos服務(wù)注冊和發(fā)現(xiàn)
服務(wù)注冊和發(fā)現(xiàn)是微服務(wù)治理的根基,服務(wù)注冊和發(fā)現(xiàn)組件是整個微服務(wù)系統(tǒng)的靈魂锨亏,選擇合適的服務(wù)注冊和發(fā)現(xiàn)組件至關(guān)重要痴怨,目前主流的服務(wù)注冊和發(fā)現(xiàn)組件有Consul、Eureka器予、Etcd等浪藻。
隨著Eureka的閉源,Spring cloud netflix-oss組件大規(guī)模的進入到了維護期乾翔,不再提供新功能爱葵,spring cloud alibaba受到開源社區(qū)的大力擁護。
服務(wù)注冊
在本案例中末融,使用2個服務(wù)注冊到Nacos上钧惧,分別為nacos-provider和nacos-consumer。
構(gòu)建服務(wù)提供者nacos-provider
新建一個Spring Boot項目勾习,Spring boot版本為2.1.4.RELEASE浓瞪,Spring Cloud 版本為Greenwich.RELEASE,在pom文件引入nacos的Spring Cloud起步依賴巧婶,代碼如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
在工程的配置文件application.yml做相關(guān)的配置乾颁,配置如下:
server:
port: 8762
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
在上述的配置的中,程序的啟動端口為8762艺栈,應(yīng)用名為nacos-provider英岭,向nacos server注冊的地址為127.0.0.1:8848。
然后在Spring Boot的啟動文件NacosProviderApplication加上@EnableDiscoveryClient注解湿右,代碼如下:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
構(gòu)建服務(wù)消費者nacos-consuer
和nacos-provider一樣诅妹,構(gòu)建服務(wù)消費者nacos-consumer,nacos-cosumer的啟動端口8763。構(gòu)建過程同nacos-provider吭狡,這里省略尖殃。
驗證服務(wù)注冊個發(fā)現(xiàn)
分別啟動2個工程,待工程啟動成功之后划煮,在訪問localhost:8848送丰,可以發(fā)現(xiàn)nacos-provider和nacos-consumer,均已經(jīng)向nacos-server注冊弛秋,如下圖所示:
服務(wù)調(diào)用
nacos作為服務(wù)注冊和發(fā)現(xiàn)組件時器躏,在進行服務(wù)消費,可以選擇RestTemplate和Feign等方式蟹略。這和使用Eureka和Consul作為服務(wù)注冊和發(fā)現(xiàn)的組件是一樣的登失,沒有什么區(qū)別。這是因為spring-cloud-starter-alibaba-nacos-discovery依賴實現(xiàn)了Spring Cloud服務(wù)注冊和發(fā)現(xiàn)的相關(guān)接口科乎,可以和其他服務(wù)注冊發(fā)現(xiàn)組件無縫切換壁畸。
提供服務(wù)
在nacos-provider工程贼急,寫一個Controller提供API服務(wù)茅茂,代碼如下:
@RestController
public class ProviderController {
Logger logger= LoggerFactory.getLogger(ProviderController.class);
@GetMapping("/hi")
public String hi(@RequestParam(value = "name",defaultValue = "forezp",required = false)String name){
return "hi "+name;
}
}
消費服務(wù)
在這里使用2種方式消費服務(wù),一種是RestTemplate太抓,一種是Feign空闲。
使用RestTemplate消費服務(wù)
RestTemplate可以使用Ribbon作為負載均衡組件,在nacos-consumer工程中引入ribbon的依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
在NacosConsumerApplication啟動文件注入RestTemplate的Bean走敌,代碼如下:
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
加上@LoadBalanced注解即可在RestTemplate上開啟LoadBalanced負載均衡的功能碴倾。
寫一個消費服務(wù)的ConsumerController,代碼如下:
@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/hi-resttemplate")
public String hiResttemplate(){
return restTemplate.getForObject("http://nacos-provider/hi?name=resttemplate",String.class);
}
重啟工程掉丽,在瀏覽器上訪問http://localhost:8763/hi-resttemplate跌榔,可以在瀏覽器上展示正確的響應(yīng),這時nacos-consumer調(diào)用nacos-provider服務(wù)成功捶障。
是FeignClient調(diào)用服務(wù)
在nacos-consumer的pom文件引入以下的依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在NacosConsumerApplication啟動文件上加上@EnableFeignClients注解開啟FeignClient的功能僧须。
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
寫一個FeignClient,調(diào)用nacos-provider的服務(wù)项炼,代碼如下:
@FeignClient("nacos-provider")
public interface ProviderClient {
@GetMapping("/hi")
String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}
寫一個消費API担平,該API使用ProviderClient來調(diào)用nacos-provider的API服務(wù),代碼如下:
@RestController
public class ConsumerController {
@Autowired
ProviderClient providerClient;
@GetMapping("/hi-feign")
public String hiFeign(){
return providerClient.hi("feign");
}
}
重啟工程锭部,在瀏覽器上訪問http://localhost:8763/hi-feign暂论,可以在瀏覽器上展示正確的響應(yīng),這時nacos-consumer調(diào)用nacos-provider服務(wù)成功拌禾。
總結(jié)
本文比較詳細的介紹了如何使用Nacos作為服務(wù)注冊中心取胎,并使用案例介紹了如何在使用nacos作為服務(wù)注冊中心時消費服務(wù)。下一篇教程將介紹如何使用nacos作為分布式配置中心湃窍。
源碼下載
https://github.com/forezp/SpringCloudLearning/tree/master/springcloud-alibaba/nacos-discovery
參考資料
https://nacos.io/zh-cn/docs/what-is-nacos.html
<div>
<p align="center">
<img src="https://www.fangzhipeng.com/img/avatar.jpg" width="258" height="258"/>
掃一掃闻蛀,支持下作者吧
</p>
<p align="center" style="margin-top: 15px; font-size: 11px;color: #cc0000;">
<strong>(轉(zhuǎn)載本站文章請注明作者和出處 <a >方志朋的博客</a>)</strong>
</p>
</div>