轉載請標明出處: blog.csdn.net/forezp/arti… 本文出自方誌朋的部落格
什麼是Nacos?
Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務後設資料及流量管理。 是Spring Cloud A 中的服務註冊發現元件,類似於Consul、Eureka,同時它又提供了分散式配置中心的功能,這點和Consul的config類似,支援熱載入。
Nacos 的關鍵特性包括:
- 服務發現和服務健康監測
- 動態配置服務,帶管理介面,支援豐富的配置維度。
- 動態 DNS 服務
- 服務及其後設資料管理
Nacos下載
Nacos依賴於Java環境,所以必須安裝Java環境。然後從官網下載Nacos的解壓包,安裝穩定版的,下載地址:github.com/alibaba/nac…
本次案例下載的版本為1.0.0 ,下載完成後,解壓,在解壓後的檔案的/bin目錄下,windows系統點選startup.cmd就可以啟動nacos。linux或mac執行以下命令啟動nacos。
sh startup.sh -m standalone
複製程式碼
啟動時會在控制檯,列印相關的日誌。nacos的啟動埠為8848,在啟動時要保證埠不被佔用。珠穆拉馬峰的高度是8844,nacos的埠是8848,有點巧合。
啟動成功,在瀏覽器上訪問:http://localhost:8848/nacos,會跳轉到登陸介面,預設的登陸使用者名稱為nacos,密碼也為nacos。
登陸成功後,展示的介面如下:
從介面可知,此時沒有服務註冊到Nacos上。
使用Nacos服務註冊和發現
服務註冊和發現是微服務治理的根基,服務註冊和發現元件是整個微服務系統的靈魂,選擇合適的服務註冊和發現元件至關重要,目前主流的服務註冊和發現元件有Consul、Eureka、Etcd等。 隨著Eureka的閉源,Spring cloud netflix-oss元件大規模的進入到了維護期,不再提供新功能,spring cloud alibaba受到開源社群的大力擁護。
服務註冊
在本案例中,使用2個服務註冊到Nacos上,分別為nacos-provider和nacos-consumer。
構建服務提供者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做相關的配置,配置如下:
server:
port: 8762
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
複製程式碼
在上述的配置的中,程式的啟動埠為8762,應用名為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);
}
}
複製程式碼
構建服務消費者nacos-consuer
和nacos-provider一樣,構建服務消費者nacos-consumer,nacos-cosumer的啟動埠8763。構建過程同nacos-provider,這裡省略。
驗證服務註冊個發現
分別啟動2個工程,待工程啟動成功之後,在訪問localhost:8848,可以發現nacos-provider和nacos-consumer,均已經向nacos-server註冊,如下圖所示:
服務呼叫
nacos作為服務註冊和發現元件時,在進行服務消費,可以選擇RestTemplate和Feign等方式。這和使用Eureka和Consul作為服務註冊和發現的元件是一樣的,沒有什麼區別。這是因為spring-cloud-starter-alibaba-nacos-discovery依賴實現了Spring Cloud服務註冊和發現的相關介面,可以和其他服務註冊發現元件無縫切換。
提供服務
在nacos-provider工程,寫一個Controller提供API服務,程式碼如下:
@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;
}
}
複製程式碼
消費服務
在這裡使用2種方式消費服務,一種是RestTemplate,一種是Feign。
使用RestTemplate消費服務
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負載均衡的功能。
寫一個消費服務的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,可以在瀏覽器上展示正確的響應,這時nacos-consumer呼叫nacos-provider服務成功。
是FeignClient呼叫服務
在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,呼叫nacos-provider的服務,程式碼如下:
@FeignClient("nacos-provider")
public interface ProviderClient {
@GetMapping("/hi")
String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}
複製程式碼
寫一個消費API,該API使用ProviderClient來呼叫nacos-provider的API服務,程式碼如下:
@RestController
public class ConsumerController {
@Autowired
ProviderClient providerClient;
@GetMapping("/hi-feign")
public String hiFeign(){
return providerClient.hi("feign");
}
}
複製程式碼
重啟工程,在瀏覽器上訪問http://localhost:8763/hi-feign,可以在瀏覽器上展示正確的響應,這時nacos-consumer呼叫nacos-provider服務成功。
總結
本文比較詳細的介紹瞭如何使用Nacos作為服務註冊中心,並使用案例介紹瞭如何在使用nacos作為服務註冊中心時消費服務。下一篇教程將介紹如何使用nacos作為分散式配置中心。
原始碼下載
參考資料
掃一掃,支援下作者吧
(轉載本站文章請註明作者和出處 方誌朋的部落格)