springCloud學(xué)習(xí)筆記-Eureka&Ribbon

springcloud是基于springboot的微服務(wù)管理框架,每一個(gè)springcloud組件都是一個(gè)springboot應(yīng)用

本文記錄eureka服務(wù)端/客戶端的開(kāi)發(fā)流程允蚣,以及使用ribbon對(duì)服務(wù)進(jìn)行調(diào)用。

服務(wù)注冊(cè)于發(fā)現(xiàn)--eureka

springboot版本與springcloud組件版本對(duì)應(yīng)關(guān)系

https://spring.io/projects/spring-cloud ,詳情見(jiàn)springcloud官網(wǎng)。本文使用springboot版本2.2.0,官方推薦springcloud組件版本為Hoxton(倫敦地鐵站名稱)

本文中用到的依賴說(shuō)明

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
#eureka-server依賴
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  <version>Hoxton.M3</version>
</dependency>
#eureka-client依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
#ribbon依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
    <version>1.4.2.RELEASE</version>
</dependency>

eureka服務(wù)端配置

  • 1.新建springboot項(xiàng)目,導(dǎo)入對(duì)應(yīng)依賴
  • 2.@EnableEurekaServer注解嫡意,該注解打在啟動(dòng)類上,標(biāo)注該應(yīng)用為eureka服務(wù)端
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
  • application.yml配置
#eureka-server配置
eureka:
  client:
    registerWithEureka: false #將自己當(dāng)做服務(wù)注冊(cè)捣辆,默認(rèn)true蔬螟,false表示自己只是服務(wù)端,不提供api服務(wù)
    fetchRegistry: false  #接收注冊(cè)信息汽畴,默認(rèn)true接收其他服務(wù)的注冊(cè)信息
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#eureka實(shí)例名稱
  instance:
    hostname: eureka-service

\color{#FF0000}{eureka.client.registerWithEureka} :表示是否將自己注冊(cè)到Eureka Server旧巾,默認(rèn)為true。由于當(dāng)前這個(gè)應(yīng)用就是Eureka Server忍些,故而設(shè)為false鲁猩。
\color{#FF0000}{eureka.client.fetchRegistry }:表示是否從Eureka Server獲取注冊(cè)信息,默認(rèn)為true罢坝。因?yàn)檫@是一個(gè)單點(diǎn)的Eureka Server廓握,不需要同步其他的Eureka Server節(jié)點(diǎn)的數(shù)據(jù),故而設(shè)為false

  • 3.啟動(dòng)server端服務(wù)嘁酿,訪問(wèn)localhost:8761
    暫時(shí)沒(méi)有啟動(dòng)client隙券,因此沒(méi)有發(fā)現(xiàn)服務(wù)


    圖片.png

eureka客戶端配置

  • 1.與server端一樣,導(dǎo)入依賴闹司,新建項(xiàng)目

  • 2.@EnableEurekaClient注解
    事實(shí)上這個(gè)注解可以不使用娱仔,eureka-client一樣可以注冊(cè)到eureka-server端

@SpringBootApplication
@Slf4j
@EnableEurekaClient //可以不使用
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
        log.info("eureka客戶端啟動(dòng)成功");
    }

}
  • 3.application.yml配置
#客戶端877x開(kāi)頭,方便記錄
server:
  port: 8771
#注冊(cè)中心服務(wù)端地址,指向上面eureka-server的 ip+port
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

#應(yīng)用名稱 ,重要游桩,后面調(diào)用服務(wù)牲迫,通過(guò) name +  url 方式實(shí)現(xiàn),負(fù)載均衡也需要使用
spring:
  application:
    name: service-hi
  • 4.啟動(dòng)應(yīng)用


    圖片.png

    圖中Application即為application.yml中對(duì)應(yīng)的應(yīng)用名稱众弓,status描述為服務(wù)提供方的 ip+port

  • 5.idea使用技巧


    圖片.png

    啟動(dòng)后服務(wù)會(huì)啟動(dòng)在端口8771 8772恩溅,如上圖所示隔箍,就不用單獨(dú)去新建一個(gè)client了

    至此谓娃,eureka-server,eureka-client均已經(jīng)開(kāi)放完成蜒滩,可以在服務(wù)注冊(cè)中心中看到兩個(gè)服務(wù)提供者已經(jīng)注冊(cè)成功了滨达。eureka-client作為服務(wù)的提供者,已經(jīng)在注冊(cè)中心上注冊(cè)了兩個(gè)服務(wù)俯艰,分別在端口8771/8772捡遍,下面開(kāi)發(fā)服務(wù)消費(fèi)者,以及使用ribbon做負(fù)載均衡竹握,對(duì)服務(wù)進(jìn)行消費(fèi)

消費(fèi)者配置

  • 1.新建springboot項(xiàng)目画株,引入eureka依賴
  • 2.新增項(xiàng)目基本代碼,啟動(dòng)類使用\color{#FF0000}{@EnableDiscoveryClient}注解,注入\color{#FF0000}{restTemplate}用于遠(yuǎn)程調(diào)用
    圖片.png
  • 3.實(shí)現(xiàn)遠(yuǎn)程調(diào)用代碼
@Service
public class DemoServiceImpl implements DemoService {

    @Autowired
    RestTemplate restTemplate;

    @Override
    public String hiService(String name) throws UnknownHostException {
        //當(dāng)前機(jī)器ip
        InetAddress ia = InetAddress.getLocalHost();
        System.out.println(ia.getHostAddress());
        //遠(yuǎn)程調(diào)用 url
        return restTemplate.getForObject("http://localhost:8771/hi?name=" + name, String.class);
    }

}

此時(shí)遠(yuǎn)程調(diào)用指定了url谓传,是根據(jù)ip+port發(fā)起的http請(qǐng)求蜈项,并沒(méi)有使用到負(fù)載均衡,下圖可見(jiàn)服務(wù)提供者在eureka注冊(cè)了兩個(gè)服務(wù)续挟,因?yàn)槭莍p+port訪問(wèn)的紧卒,沒(méi)有全部利用上,下面介紹使用ribbon的方式,實(shí)現(xiàn)對(duì)服務(wù)的調(diào)用诗祸,后面會(huì)補(bǔ)充fegin的方式調(diào)用服務(wù)

圖片.png

引入springcloud-ribbon,實(shí)現(xiàn)服務(wù)調(diào)用

ribbon可以進(jìn)入服務(wù)間的調(diào)用跑芳,可以實(shí)現(xiàn)負(fù)載均衡,即對(duì)服務(wù)調(diào)用策略進(jìn)行配置

  • 1.引入ribbon依賴
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>
  • 2.@LoadBalanced注解
@Slf4j
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
        log.info("consumer啟動(dòng)成功");
    }

    @Bean
    //使用該注解開(kāi)啟負(fù)載均很直颅,默認(rèn)負(fù)載均很策略為round輪詢策略
    @LoadBalanced
    RestTemplate restTemplate()
    {
        return new RestTemplate();
    }

}
  • 3.更改調(diào)用方式
return restTemplate.getForObject("http://SERVICE-HI/hi?name=" + name, String.class);

這里要將上文提到的url 換成服務(wù)名稱博个,注意服務(wù)名稱要與上文中服務(wù)提供者配置的:application.name 的名稱一致,大小寫(xiě)都可以功偿,或者以eureka服務(wù)列表中的值為準(zhǔn)

圖片.png

#應(yīng)用名稱
spring:
  application:
    name: service-hi
  • 4.啟動(dòng)服務(wù)坡倔,多次調(diào)用測(cè)試赡译,是否為輪詢策略

    圖片.png

    至此雇盖,ribbon實(shí)現(xiàn)輪詢負(fù)載均衡調(diào)用代碼實(shí)現(xiàn)搓谆,下面簡(jiǎn)單介紹通過(guò)配置文件自定義負(fù)載均衡策略

  • 5.配置文件修改負(fù)載均衡策略

SERVICE-HI:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
圖片.png

SERVICE-HI是eureka中注冊(cè)的服務(wù)名彩倚,需要注意的是惯豆,我一開(kāi)始用的是yml文件中的小寫(xiě)名稱:service-hi蜒什,但是負(fù)載均衡策略沒(méi)有生效管毙,這里原因還不清楚背桐,有知道的大佬可以留言关拒,萬(wàn)分感謝佃蚜。

eureka遇到的一些疑問(wèn)

至此谐算,springcloud 使用eureka+ribbon,進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)及調(diào)用已經(jīng)基本實(shí)現(xiàn)归露,這里都是簡(jiǎn)單的demo代碼洲脂,僅以次記錄自己的學(xué)習(xí)過(guò)程,歡迎大家來(lái)交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剧包,一起剝皮案震驚了整個(gè)濱河市恐锦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疆液,老刑警劉巖一铅,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堕油,居然都是意外死亡潘飘,警方通過(guò)查閱死者的電腦和手機(jī)肮之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卜录,“玉大人局骤,你說(shuō)我怎么就攤上這事”┐眨” “怎么了峦甩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)现喳。 經(jīng)常有香客問(wèn)我凯傲,道長(zhǎng),這世上最難降的妖魔是什么嗦篱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任冰单,我火速辦了婚禮,結(jié)果婚禮上灸促,老公的妹妹穿的比我還像新娘诫欠。我一直安慰自己,他們只是感情好浴栽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布荒叼。 她就那樣靜靜地躺著,像睡著了一般典鸡。 火紅的嫁衣襯著肌膚如雪被廓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天萝玷,我揣著相機(jī)與錄音嫁乘,去河邊找鬼。 笑死球碉,一個(gè)胖子當(dāng)著我的面吹牛蜓斧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睁冬,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挎春,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了痴突?” 一聲冷哼從身側(cè)響起搂蜓,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狼荞,失蹤者是張志新(化名)和其女友劉穎辽装,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體相味,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拾积,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拓巧。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斯碌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肛度,到底是詐尸還是另有隱情傻唾,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布承耿,位于F島的核電站冠骄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏加袋。R本人自食惡果不足惜凛辣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望职烧。 院中可真熱鬧扁誓,春花似錦、人聲如沸蚀之。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)足删。三九已至前普,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壹堰,已是汗流浹背拭卿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贱纠,地道東北人峻厚。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谆焊,于是被迫代替她去往敵國(guó)和親惠桃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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