SpringCloud使用Nacos服務發(fā)現(xiàn)實現(xiàn)遠程調用

1 Nacos

關于Nacos之前寫了兩篇文章關于SpringBoot對它的使用叉存,感興趣可以查看一下。

《SpringBoot使用Nacos配置中心》

《SpringBoot使用Nacos服務發(fā)現(xiàn)》

在SpringBoot使用的時候伪阶,需要自行去向Nacos服務注冊自己的服務,Nacos也提供了SpringCloud服務發(fā)現(xiàn)的依賴处嫌,本文結合spring-cloud-starter-alibaba-nacos-discovery進行使用介紹栅贴。

本文使用版本為:

  • SpringCloud Finchley.SR2
  • SpringBoot 2.0.3.RELEASE
  • spring-cloud-starter-alibaba-nacos-discovery 0.2.1.RELEASE
  • spring-cloud-starter-openfeign 2.0.0.RELEASE

2.本文場景

兩個服務,如下:

  • springcloud-nacos-discovery-provider:端口號10000熏迹,服務提供者檐薯。
  • springcloud-nacos-discovery-consumer:端口號10001,服務消費者注暗。

原理很簡單坛缕,瀏覽器訪問消費者墓猎,消費者調用服務提供者。

3.服務提供者

3.1 依賴配置

創(chuàng)建一個項目祷膳,項目中加入SpringCloud-Nacos依賴陶衅,完整pom如下所示。


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dalaoyang</groupId>
    <artifactId>springcloud_nacos_discovery_provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloud_nacos_discory_provider</name>
    <description>springcloud_nacos_discovery_provider</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.2 啟動類
在啟動類加入@SpringBootApplication注解直晨,完整啟動類代碼如下所示搀军。

package com.dalaoyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudNacosDiscoveryProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudNacosDiscoveryProviderApplication.class, args);
    }

}

3.3 配置文件
配置文件中配置Nacos服務地址,當前服務名勇皇,這里需要注意一點罩句,使用Ribbon負載均衡的時候服務名中不能使用下劃線,不然會找不到服務敛摘。

配置文件如下所示门烂。

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

3.4 提供服務
創(chuàng)建一個Controller,提供一個方法進行測試兄淫,如下所示屯远。

package com.dalaoyang.controller;

import org.springframework.web.bind.annotation.*;

/**
 * @author yangyang
 * @date 2019/2/4
 */
@RestController
public class TestController {

    @GetMapping("/test/{string}")
    public String test(@PathVariable String string) {
        return "Hello Nacos :" + string;
    }
}

4 服務消費者
4.1 依賴配置
與服務提供者類似,在服務消費者加入SpringCloud-Nacos依賴和OpenFeign依賴捕虽,完整pom入夏所示慨丐。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.dalaoyang</groupId>
    <artifactId>springcloud_nacos_discovery_consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloud_nacos_discovery_consumer</name>
    <description>springcloud_nacos_discovery_consumer</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.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-openfeign</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4.2 啟動類
在啟動類加入注解@EnableDiscoveryClient并且開啟負載均衡,如下所示泄私。

package com.dalaoyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudNacosDiscoveryConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudNacosDiscoveryConsumerApplication.class, args);
    }

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

4.3 配置文件
配置文件與提供者一致房揭,只是服務名不同,如下所示晌端。

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

4.4 創(chuàng)建服務調用
創(chuàng)建一個Controller進行調用服務捅暴,如下所示。

package com.dalaoyang.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author yangyang
 * @date 2019/2/4
 */
@RestController
public class TestConrtroller {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("test/{string}")
    public String test(@PathVariable String string) {
        return restTemplate.getForObject("http://springcloud-nacos-discovery-provider/test/" + string, String.class);
    }
}

5 測試

分別啟動兩個服務咧纠,查看Nacos管理頁面蓬痒,如圖所示。

點擊詳情可以查看服務的詳細信息漆羔,如端口號乳幸,權重等,如圖所示钧椰。

接下倆在瀏覽器訪問http://localhost:10001/test/dalaoyang,遠程調用成功符欠。

6.源碼

服務提供者:https://gitee.com/dalaoyang/springcloud_learn/tree/master/springcloud_nacos_discovery_provider

服務消費者:https://gitee.com/dalaoyang/springcloud_learn/tree/master/springcloud_nacos_discovery_consumer

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嫡霞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子希柿,更是在濱河造成了極大的恐慌诊沪,老刑警劉巖养筒,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異端姚,居然都是意外死亡晕粪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門渐裸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巫湘,“玉大人,你說我怎么就攤上這事昏鹃∩蟹眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵洞渤,是天一觀的道長阅嘶。 經常有香客問我,道長载迄,這世上最難降的妖魔是什么讯柔? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮护昧,結果婚禮上魂迄,老公的妹妹穿的比我還像新娘。我一直安慰自己捏卓,他們只是感情好极祸,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怠晴,像睡著了一般遥金。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒜田,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天稿械,我揣著相機與錄音,去河邊找鬼冲粤。 笑死美莫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的梯捕。 我是一名探鬼主播厢呵,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼傀顾!你這毒婦竟也來了襟铭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寒砖,沒想到半個月后赐劣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡哩都,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年魁兼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漠嵌。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡咐汞,死狀恐怖,靈堂內的尸體忽然破棺而出献雅,到底是詐尸還是另有隱情碉考,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布挺身,位于F島的核電站,受9級特大地震影響章钾,放射性物質發(fā)生泄漏墙贱。R本人自食惡果不足惜贱傀,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一惨撇、第九天 我趴在偏房一處隱蔽的房頂上張望魁衙。 院中可真熱鬧,春花似錦剖淀、人聲如沸纤房。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舒岸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棚蓄,已是汗流浹背堕扶。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留典尾,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓河闰,卻偏偏與公主長得像褥紫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子髓考,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容