Spring Cloud Alibaba教程:使用Nacos作為服務(wù)注冊發(fā)現(xiàn)組件

轉(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皆刺。

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

WX20190511-112054@2x.png

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

WX20190511-113825@2x.png

服務(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>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摄杂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子循榆,更是在濱河造成了極大的恐慌析恢,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秧饮,死亡現(xiàn)場離奇詭異映挂,居然都是意外死亡,警方通過查閱死者的電腦和手機盗尸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門柑船,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泼各,你說我怎么就攤上這事鞍时。” “怎么了扣蜻?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵逆巍,是天一觀的道長。 經(jīng)常有香客問我莽使,道長锐极,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任芳肌,我火速辦了婚禮灵再,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亿笤。我一直安慰自己翎迁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布净薛。 她就那樣靜靜地躺著汪榔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罕拂。 梳的紋絲不亂的頭發(fā)上揍异,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音爆班,去河邊找鬼衷掷。 笑死,一個胖子當(dāng)著我的面吹牛柿菩,可吹牛的內(nèi)容都是我干的戚嗅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懦胞!你這毒婦竟也來了替久?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躏尉,失蹤者是張志新(化名)和其女友劉穎蚯根,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胀糜,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡颅拦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了教藻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片距帅。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖括堤,靈堂內(nèi)的尸體忽然破棺而出碌秸,到底是詐尸還是另有隱情,我是刑警寧澤悄窃,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布讥电,位于F島的核電站,受9級特大地震影響广匙,放射性物質(zhì)發(fā)生泄漏允趟。R本人自食惡果不足惜恼策,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一鸦致、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涣楷,春花似錦分唾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碳褒,卻和暖如春折砸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沙峻。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工睦授, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摔寨。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓去枷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子删顶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 上個月最后一天的凌晨竖螃,Spring Cloud Alibaba 正式入駐了 Spring Cloud 官方孵化器,...
    方志朋閱讀 5,513評論 0 16
  • 什么是Nacos Nacos 致力于幫助您發(fā)現(xiàn)逗余、配置和管理微服務(wù)特咆。Nacos 提供了一組簡單易用的特性集,幫助您快...
    接著奏樂接著舞S閱讀 5,319評論 1 14
  • 由于沒去電影院看《蟻人2》录粱,只好等網(wǎng)絡(luò)上的高清資源坚弱。今天恰巧看到了,天天美劇出了《蟻人2》关摇。 影片總體情節(jié)比較平淡...
    墨道院閱讀 290評論 0 1
  • 神了荒叶,昨天權(quán)杖國王、今天權(quán)杖皇后输虱。 昨天是為一個惡心人帶來的事情抽牌些楣、今天是為自己的一天進行抽牌。 首先皇后代表陰...
    LLFLily粒妃閱讀 819評論 0 0