Spring Cloud Alibaba教程:使用Nacos作為服務注冊發現組件

轉載請標明出處:
https://blog.csdn.net/forezp/article/details/90142744
本文出自方志朋的博客

什么是Nacos?

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

Nacos 的關鍵特性包括:

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

Nacos下載

Nacos依賴于Java環境,所以必須安裝Java環境。然后從官網下載Nacos的解壓包,安裝穩定版的,下載地址:https://github.com/alibaba/nacos/releases

本次案例下載的版本為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。

登陸成功后,展示的界面如下:

WX20190511-112054@2x.png

從界面可知,此時沒有服務注冊到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注冊,如下圖所示:

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作為分布式配置中心。

源碼下載

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>(轉載本站文章請注明作者和出處 <a >方志朋的博客</a>)</strong>
</p>
</div>

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容

  • 上個月最后一天的凌晨,Spring Cloud Alibaba 正式入駐了 Spring Cloud 官方孵化器,...
    方志朋閱讀 5,527評論 0 16
  • 什么是Nacos Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快...
    接著奏樂接著舞S閱讀 5,333評論 1 14
  • 由于沒去電影院看《蟻人2》,只好等網絡上的高清資源。今天恰巧看到了,天天美劇出了《蟻人2》。 影片總體情節比較平淡...
    墨道院閱讀 294評論 0 1
  • 神了,昨天權杖國王、今天權杖皇后。 昨天是為一個惡心人帶來的事情抽牌、今天是為自己的一天進行抽牌。 首先皇后代表陰...
    LLFLily粒妃閱讀 836評論 0 0