Spring Cloud Alibaba 實戰 之 Nacos 服務注冊和發現


服務注冊與發現,服務發現主要用於實現各個微服務實例的自動化注冊與發現,是微服務治理的核心,學習 Spring Cloud Alibaba,首先要了解框架中的服務注冊和發現組件——Nacos。

一、Spring Cloud 服務注冊和發現組件

1.Spring Cloud Eureka 閉源風波

在Spring Cloud的子項目中,Spring Cloud Netflix提供了Eureka來實現服務的發現功能,Eureka的服務發現包含兩大組件:

服務端發現組件(EurekaServer)和客戶端發現組件(Eureka Client)。

Eureka的服務發現機制如圖所示。

當客戶端服務通過注解等方式嵌入到程序的代碼中運行時,客戶端發現組件就會向注冊中心注冊自身提供的服務,並周期性地發送心跳來更新服務,

如果連續三次心跳都不能夠發現服務,那么Eureka就會將這個服務節點從服務注冊表中移除。

各個服務之間會通過注冊中心的注冊信息以Rest方式來實現調用,並且可以直接通過服務名進行調用。

2012年,Netflix 將 Euerka 開源,Euerka 在 Spring Cloud 中廣泛應用,但是2018年6月, Netflix 宣布 Euerka 2.0 閉源,目前社區中集成的都是1.0版本。

閉源之后,服務發現選擇哪個組件,答案就是 Nacos。

 

2.阿里巴巴開源 Nacos

阿里巴巴官方給Nacos的定位是「一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台」。

Nacos支持的功能包括服務發現,集成配置中心,和服務數據管理。

 

二、Nacos本地安裝和啟動

可以通過源碼和發行包兩種方式來獲取 Nacos,下面我們下載源碼並且構建。

從 Github 上下載源碼並編譯

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

  

啟動Nacos服務

Linux/Unix/Mac系統
啟動命令(standalone代表着單機模式運行,非集群模式):

sh startup.sh -m standalone

  

Windows系統

啟動命令:

`
cmd startup.cmd
`

  


或者雙擊startup.cmd運行文件

應用啟動之后,訪問 http://127.0.0.1:8848/nacos/,Nacos0.8 版本已經支持簡單登錄功能,默認用戶名/密碼為: nacos/nacos。

 

三、集成 Spring Cloud 服務發現

如果你還不是很熟悉 Spring Cloud 項目的創建,可以先看一下前面這篇博文,。

最新的版本關系查看 版本說明Wiki

創建服務提供者

1.新建 Spring Boot 工程,命名為 nacos-spring-cloud,在中添加 Nocos 的依賴,注意:版本 0.2.x.RELEASE 對應的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對應的是 Spring Boot 1.x 版本。

    <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>0.2.2.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.0</version> </dependency> </dependencies> </dependencyManagement>

2.添加一個模塊,nacos-spring-cloud-provider,作為 服務提供者,Pom文件配置如下

    <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.0.Final</version> </dependency> </dependencies>

3.創建啟動類,在啟動類中添加一個Restful類型的方法,作為服務實現。

@SpringBootApplication @EnableDiscoveryClient @RestController public class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); } @RequestMapping(value = "/hello/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return "Hello " + string; } } 

4.修改配置文件,注冊到 Nacos 控制台。

server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

5.啟動工程,查看 Nacos 控制台。

 

創建服務消費者

1.添加一個新 module,nacos-spring-cloud-consumer,作為服務消費者。

2.在啟動類中添加一個Restful類型的方法,Pom文件依賴如下:

<properties> <spring-cloud-openfeign.version>2.0.0.RELEASE</spring-cloud-openfeign.version> <spring-cloud-netflix.version>2.0.0.RELEASE</spring-cloud-netflix.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-netflix-ribbon</artifactId> <version>${spring-cloud-netflix.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${spring-cloud-openfeign.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> </dependencies>

3.創建啟動類和測試方法,來調用提供者的服務。

@SpringBootApplication @EnableDiscoveryClient public class NacosConsumerApplication { public static void main(String[] args) { SpringApplication.run(NacosConsumerApplication.class, args); } @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }

通過RestTemplate調用服務:

@RestController public class TestController { @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/hello/{str}", method = RequestMethod.GET) public String echo(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/hello/" + str, String.class); } }

4.修改配置文件,訂閱服務

server.port=8080
spring.application.name=service-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

5.啟動工程,查看 Nacos 控制台。

6.測試服務調用,正常返回。

四、總結

這個小教程用一個簡單的示例,搭建了基於Nacos的 Spring Cloud 服務發現,可以看到 Nacos 的控制台還有配置管理的功能,下一節會學習 Nacos 的配置管理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM