[菜鳥(niǎo)SpringCloud入門(mén)]第四章:遠(yuǎn)程調(diào)用服務(wù)實(shí)戰(zhàn)

在這里插入圖片描述

前言

歡迎來(lái)到菜鳥(niǎo)SpringCloud入門(mén)實(shí)戰(zhàn)系列(SpringCloudForNoob),該系列通過(guò)層層遞進(jìn)的實(shí)戰(zhàn)視角躲叼,來(lái)一步步學(xué)習(xí)和理解SpringCloud。

本系列適合有一定Java以及SpringBoot基礎(chǔ)的同學(xué)閱讀沮尿。

每篇文章末尾都附有本文對(duì)應(yīng)的Github源代碼赖舟,方便同學(xué)調(diào)試提茁。

Github倉(cāng)庫(kù)地址:

https://github.com/qqxx6661/springcloud_for_noob

菜鳥(niǎo)SpringCloud入門(mén)實(shí)戰(zhàn)系列

你可以通過(guò)以下兩種途徑查看菜鳥(niǎo)SpringCloud入門(mén)實(shí)戰(zhàn)系列

前文回顧:

實(shí)戰(zhàn)版本

  • SpringBoot:2.0.3.RELEASE
  • SpringCloud:Finchley.RELEASE

-----正文開(kāi)始-----

遠(yuǎn)程調(diào)用服務(wù)實(shí)戰(zhàn)

本章節(jié)中需要有三個(gè)角色:服務(wù)注冊(cè)中心(對(duì)應(yīng)前文中我們的eureka子模塊)骂蓖、服務(wù)提供者(對(duì)應(yīng)前文中我們的eureka-hi子模塊)帆精、服務(wù)消費(fèi)者鸭蛙,其中服務(wù)注冊(cè)中心就是我們上一篇的eureka單機(jī)版啟動(dòng)既可摹恨,流程是首先啟動(dòng)注冊(cè)中心,服務(wù)提供者生產(chǎn)服務(wù)并注冊(cè)到服務(wù)中心中娶视,消費(fèi)者從服務(wù)中心中獲取服務(wù)并執(zhí)行晒哄。

服務(wù)提供者:使用原來(lái)的eureka-hi子模塊

子模塊不需要做更改睁宰。

值得注意的是,你可以使用@EnableDiscoveryClient代替@EnableEurekaClient

兩者的區(qū)別:

http://www.reibang.com/p/f6db3117864f

注解@EnableEurekaClient上有@EnableDiscoveryClient注解寝凌,可以說(shuō)基本就是EnableEurekaClient有@EnableDiscoveryClient的功能柒傻,另外上面的注釋中提到,其實(shí)@EnableEurekaClientz注解就是一種方便使用eureka的注解而已较木,可以說(shuō)使用其他的注冊(cè)中心后红符,都可以使用@EnableDiscoveryClient注解,但是使用@EnableEurekaClient的情景伐债,就是在服務(wù)采用eureka作為注冊(cè)中心的時(shí)候预侯,使用場(chǎng)景較為單一。

服務(wù)消費(fèi)者:新建service-feign子模塊

創(chuàng)建子模塊service-feign峰锁,步驟和之前類(lèi)似萎馅,請(qǐng)參考教程第一章。

修改pom.xml虹蒋,引入:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

然后在主程序引入:

@EnableFeignClients
@EnableEurekaClient

這時(shí)候糜芳,我的springboot2.0.3又出事了,@EnableFeignClients無(wú)法引入魄衅,需要將pom.xml的引入修改為:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <!--spring boot 2.0.3版本解決方案:spring-cloud-starter-feign-->
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

補(bǔ)充:Spring Boot 2下使用Feign找不到@EnableFeignClients的解決辦法

https://blog.csdn.net/alinyua/article/details/80070890

該作者給了一個(gè)完整的解決無(wú)法引入包問(wèn)題的思路峭竣,文章篇幅很長(zhǎng),思路值得學(xué)習(xí)晃虫!

之后邪驮,修改application.yml:

server:
  # 服務(wù)端口號(hào)
  port: 8765
spring:
  application:
    # 服務(wù)名,即serviceId
    name: service-feign
eureka:
  client:
    serviceUrl:
      # 安全認(rèn)證的服務(wù)注冊(cè)中心地址
      defaultZone: http://localhost:8761/eureka

遠(yuǎn)程調(diào)用

首先回顧一下eureka-hi的方法傲茄,它提供了一個(gè)上述eureka-hi服務(wù)提供了一個(gè)RESTful風(fēng)格的接口:

/** 獲取端口號(hào) */
@Value("${server.port}")
String port;

/**
 * 定義一個(gè)簡(jiǎn)單接口
 * @param name
 * @return
 */
@GetMapping("/hi/{name}")
public String home(@PathVariable String name){
    return "hi " + name + ",I am from service-hi, port :" + port;
}
  • 行為:GET
  • 資源:/hi/{name}

編寫(xiě)調(diào)用eureka-hi提供的接口的本地接口ServiceHi.java,如下:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * <p>一個(gè)Feign服務(wù)消費(fèi)者接口</p>
 **/
@FeignClient(value = "service-hi")
public interface ServiceHi {
    /**
     * <p>通過(guò)Feign偽Http客戶端調(diào)用service-hi提供的服務(wù)</p>
     * @author hanchao 2018/5/19 17:59
     **/
    @GetMapping("/hi/{name}")
    String sayHiFromServiceHi(@PathVariable(value = "name") String name);
}

說(shuō)明:

  • 通過(guò)@FeignClient標(biāo)識(shí)當(dāng)前接口是一個(gè)Feign客戶端沮榜,value = "service-hi"表示其針對(duì)的是名為service-hi的服務(wù)盘榨。
  • service-hi則是我們eureka-hi子模塊的spring.application.name,這個(gè)name已經(jīng)在eureka注冊(cè)過(guò)
  • sayHiFromServiceHi方法為偽裝成HTTP客戶端方法蟆融,與eureka-hi的[GET] /hi/{name}服務(wù)接口相對(duì)應(yīng)草巡。

之后,新建HelloController.java型酥,如下:


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;

/**
 * <p>服務(wù)消費(fèi)控制層</p>
 **/
@RestController
public class HelloController {

    /** 注入服務(wù)"service-hi"的Feign客戶端ServiceHi */
    @Autowired
    private ServiceHi serviceHi;

    /**
     * 調(diào)用Feign客戶端提供的服務(wù)山憨,自帶負(fù)載均衡
     * @param name
     * @return
     */
    @GetMapping("/hello/{name}")
    public String sayHi(@PathVariable String name){
        //調(diào)用Feign客戶端ScheduleServiceHi的接口
        return serviceHi.sayHiFromServiceHi(name);
    }
}

重點(diǎn):

  • serviceHi.sayHiFromServiceHi(name)即通過(guò)Feign調(diào)用偽HTTP客戶端的服務(wù)接口。

至此我們已經(jīng)配置完畢弥喉,依次啟動(dòng)服務(wù)eureka郁竟、eureka-hi和service-feign∮删常可以看到兩個(gè)服務(wù)都已經(jīng)在eureka注冊(cè):

在這里插入圖片描述

訪問(wèn) http://localhost:8765/hello/rude3knife 棚亩,即service-feign提供的服務(wù)接口蓖议。
這個(gè)服務(wù)接口會(huì)通過(guò)Feign去調(diào)用服務(wù)eureka-hi提供的服務(wù)接口,結(jié)果顯示服務(wù)間調(diào)用成功讥蟆。

在這里插入圖片描述

在該調(diào)用中勒虾,我們feign并不需要指定端口號(hào),它并不知道這個(gè)方法所在的服務(wù)提供者現(xiàn)在在哪個(gè)端口運(yùn)行瘸彤,我們只需要向eureka尋求服務(wù)修然。

三個(gè)模塊的拓?fù)鋱D如下:

在這里插入圖片描述

測(cè)試Feign負(fù)載均衡

Feign會(huì)對(duì)服務(wù)調(diào)用進(jìn)行負(fù)載平衡,我們需要同時(shí)打開(kāi)兩個(gè)eureka-hi服務(wù)质况,由于在同一臺(tái)電腦上愕宋,就得把端口號(hào)從8763改為8764,然后同時(shí)開(kāi)啟8763和8764兩個(gè)服務(wù)拯杠。

要同時(shí)運(yùn)行兩個(gè)端口不同的相同服務(wù)掏婶,需要在run configuration里面把a(bǔ)llow parallle打開(kāi):

在這里插入圖片描述

運(yùn)行結(jié)構(gòu)是這樣的:

在這里插入圖片描述

可以看到有兩個(gè)Service-Hi進(jìn)行了注冊(cè):

在這里插入圖片描述

訪問(wèn)http://localhost:8765/hello/rude3knife

連續(xù)訪問(wèn)兩次,發(fā)現(xiàn)兩次會(huì)分別取調(diào)用eureka-hi的兩個(gè)服務(wù)節(jié)點(diǎn):

在這里插入圖片描述

在這里插入圖片描述

最后是負(fù)載平衡的拓?fù)鋱D:

在這里插入圖片描述

本章代碼

https://github.com/qqxx6661/springcloud_for_noob/tree/master/04-servier-feign

參考

Spring-Cloud筆記04:服務(wù)消費(fèi)者Feign

https://blog.csdn.net/hanchao5272/article/details/80574441

springcloud(三):服務(wù)提供與調(diào)用

http://www.ityouknow.com/springcloud/2017/05/12/eureka-provider-constomer.html

-----正文結(jié)束-----

菜鳥(niǎo)SpringCloud實(shí)戰(zhàn)專(zhuān)欄全導(dǎo)航:通過(guò)以下兩種途徑查看

關(guān)注我

我是蠻三刀把刀潭陪,后端開(kāi)發(fā)雄妥。

主要關(guān)注后端開(kāi)發(fā),數(shù)據(jù)安全依溯,爬蟲(chóng)等方向老厌。

來(lái)微信和我聊聊:yangzd1102

Github個(gè)人主頁(yè):

https://github.com/qqxx6661

原創(chuàng)博客主要內(nèi)容

  • Java知識(shí)點(diǎn)復(fù)習(xí)全手冊(cè)
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • Python爬蟲(chóng)相關(guān)技術(shù)實(shí)戰(zhàn)
  • 后端開(kāi)發(fā)相關(guān)技術(shù)實(shí)戰(zhàn)
  • SpringCloud入門(mén)實(shí)戰(zhàn)

同步更新公眾號(hào)及以下博客

1. Csdn

http://blog.csdn.net/qqxx6661

擁有專(zhuān)欄:

  • Leetcode題解(Java/Python)
  • Python爬蟲(chóng)實(shí)戰(zhàn)
  • Java程序員知識(shí)點(diǎn)復(fù)習(xí)手冊(cè)
  • SpringCloud入門(mén)實(shí)戰(zhàn)

2. 知乎

https://www.zhihu.com/people/yang-zhen-dong-1/

擁有專(zhuān)欄:

  • Java程序員面試復(fù)習(xí)手冊(cè)
  • LeetCode算法題詳解與代碼實(shí)現(xiàn)
  • 后臺(tái)開(kāi)發(fā)實(shí)戰(zhàn)

3. 掘金

https://juejin.im/user/5b48015ce51d45191462ba55

4. 簡(jiǎn)書(shū)

http://www.reibang.com/u/b5f225ca2376

個(gè)人公眾號(hào):Rude3Knife

個(gè)人公眾號(hào):Rude3Knife

如果文章對(duì)你有幫助,不妨收藏起來(lái)并轉(zhuǎn)發(fā)給您的朋友們~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黎炉,一起剝皮案震驚了整個(gè)濱河市枝秤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慷嗜,老刑警劉巖淀弹,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庆械,居然都是意外死亡薇溃,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)缭乘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沐序,“玉大人,你說(shuō)我怎么就攤上這事堕绩〔哂祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵奴紧,是天一觀的道長(zhǎng)特姐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)黍氮,這世上最難降的妖魔是什么到逊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任铣口,我火速辦了婚禮,結(jié)果婚禮上觉壶,老公的妹妹穿的比我還像新娘脑题。我一直安慰自己,他們只是感情好铜靶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布叔遂。 她就那樣靜靜地躺著,像睡著了一般争剿。 火紅的嫁衣襯著肌膚如雪已艰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天蚕苇,我揣著相機(jī)與錄音哩掺,去河邊找鬼。 笑死涩笤,一個(gè)胖子當(dāng)著我的面吹牛嚼吞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹬碧,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舱禽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了恩沽?” 一聲冷哼從身側(cè)響起誊稚,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罗心,沒(méi)想到半個(gè)月后里伯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渤闷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年俏脊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肤晓。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖认然,靈堂內(nèi)的尸體忽然破棺而出补憾,到底是詐尸還是另有隱情,我是刑警寧澤卷员,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布盈匾,位于F島的核電站,受9級(jí)特大地震影響毕骡,放射性物質(zhì)發(fā)生泄漏削饵。R本人自食惡果不足惜岩瘦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窿撬。 院中可真熱鬧启昧,春花似錦、人聲如沸劈伴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跛璧。三九已至严里,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間追城,已是汗流浹背刹碾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留座柱,地道東北人迷帜。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辆布,于是被迫代替她去往敵國(guó)和親瞬矩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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