Spring Cloud Alibaba教程:使用Nacos做爲服務註冊發現組件

轉載請標明出處: blog.csdn.net/forezp/arti… 本文出自方誌朋的博客html

什麼是Nacos?

Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。 是Spring Cloud A 中的服務註冊發現組件,相似於Consul、Eureka,同時它又提供了分佈式配置中心的功能,這點和Consul的config相似,支持熱加載。java

Nacos 的關鍵特性包括:linux

  • 服務發現和服務健康監測
  • 動態配置服務,帶管理界面,支持豐富的配置維度。
  • 動態 DNS 服務
  • 服務及其元數據管理

Nacos下載git

Nacos依賴於Java環境,因此必須安裝Java環境。而後從官網下載Nacos的解壓包,安裝穩定版的,下載地址:github.com/alibaba/nac…github

本次案例下載的版本爲1.0.0 ,下載完成後,解壓,在解壓後的文件的/bin目錄下,windows系統點擊startup.cmd就能夠啓動nacos。linux或mac執行如下命令啓動nacos。spring

sh startup.sh -m standalone
複製代碼

啓動時會在控制檯,打印相關的日誌。nacos的啓動端口爲8848,在啓動時要保證端口不被佔用。珠穆拉馬峯的高度是8844,nacos的端口是8848,有點巧合。windows

啓動成功,在瀏覽器上訪問:http://localhost:8848/nacos,會跳轉到登錄界面,默認的登錄用戶名爲nacos,密碼也爲nacos。瀏覽器

登錄成功後,展現的界面以下:bash

WX20190511-112054@2x.png

從界面可知,此時沒有服務註冊到Nacos上。app

使用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註冊,以下圖所示:

WX20190511-113825@2x.png

服務調用

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做爲分佈式配置中心。

源碼下載

github.com/forezp/Spri…

參考資料

nacos.io/zh-cn/docs/…


掃一掃,支持下做者吧

(轉載本站文章請註明做者和出處 方誌朋的博客

相關文章
相關標籤/搜索