国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

這篇具有很好參考價(jià)值的文章主要介紹了【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、Eureka

1、服務(wù)提供者與消費(fèi)者

服務(wù)提供者:一次業(yè)務(wù)中,被其它微服務(wù)調(diào)用的服務(wù)。(提供接口給其它微服務(wù))

服務(wù)消費(fèi)者:一次業(yè)務(wù)中,調(diào)用其它微服務(wù)的服務(wù)。(調(diào)用其它微服務(wù)提供的接口)

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

很明顯,這是一個(gè)相對的概念。

2、Eureka原理分析

上一篇中,遠(yuǎn)程調(diào)用時(shí),url參數(shù)是寫死在代碼中的,而不同的測試、生產(chǎn)、開發(fā)環(huán)境IP不同,有集群時(shí),端口也不能固定。

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

很明顯,硬編碼肯定行不通。Eureka就是來解決這個(gè)問題的。

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • 每個(gè)服務(wù)啟動的時(shí)候,將自己的信息注冊到eureka中
  • 某個(gè)服務(wù)需要調(diào)用其他服務(wù)時(shí),向eureka拉取對應(yīng)的服務(wù)信息
  • 負(fù)載均衡到其中一臺(如圖中的localhost:8081)
  • 進(jìn)行遠(yuǎn)程調(diào)用
  • 服務(wù)實(shí)例向eureka心跳續(xù)約,每30秒一次,eureka監(jiān)控到某個(gè)服務(wù)實(shí)例不再心跳時(shí),就從其注冊信息中剔除這條信息。服務(wù)消費(fèi)者拉取時(shí)當(dāng)然也就拉取不到這個(gè)宕掉的服務(wù)實(shí)例
  • 新啟動一個(gè)服務(wù),服務(wù)信息注冊到了eureka中…以此類推

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon
接下來開始搭建Eureka,并進(jìn)行服務(wù)注冊和服務(wù)發(fā)現(xiàn)

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

3、搭建Eureka

  • 在父工程下新建eureka模塊,選擇Maven,點(diǎn)擊Finish

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • 給該模塊引入依賴
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--版本在父工程中統(tǒng)一管理,這里不用寫-->
  • 編寫啟動類,添加@EnableEurekaServer注解(自動裝配的開關(guān))
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

  • 添加application.yaml文件
server:
  port: 10086 # 服務(wù)端口
spring:
  application:
    name: eurekaserver # eureka的服務(wù)名稱,eureka自身也是個(gè)微服務(wù),也要注冊自己的信息到eureka注冊中心
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

# eureka自身也是個(gè)微服務(wù),也要注冊自己的信息到eureka注冊中心
# 王思聰住萬達(dá)酒店也得身份證登記一下,雖然那就是他家的產(chǎn)業(yè)
  • 啟動eureka模塊

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon
【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • 注冊成功

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

4、服務(wù)注冊

接下來將user和order服務(wù)注冊到eureka中:

  • 在user模塊的pom文件中引入eureka客戶端依賴
<!--eureka客戶端依賴-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在application.yaml文件中增加注冊中心地址的配置
server:
  port: 8081
spring:
  application: 
    name: userservice
eyreka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

  • 重啟user模塊(order模塊操作步驟相同),注冊成功

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

5、模擬多服務(wù)實(shí)例啟動

上面完成的注冊都是單服務(wù)實(shí)例的,接下來在IDEA中模擬啟動多個(gè)服務(wù)實(shí)例:

  • 右鍵選擇拷貝

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • -Dserver.port覆蓋yaml文件中的端口,從而換個(gè)新端口

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • 啟動這個(gè)新服務(wù)實(shí)例,注冊成功

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

6、服務(wù)的發(fā)現(xiàn)

接下來實(shí)現(xiàn):在order服務(wù)中完成服務(wù)信息的拉取,然后通過負(fù)載均衡挑選一個(gè)user服務(wù),實(shí)現(xiàn)遠(yuǎn)程調(diào)用

服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表,然后在對服務(wù)列表做負(fù)載均衡

  • 修改order代碼,將服務(wù)IP和端口改為服務(wù)名
String url ="http://userservice/user/" + order.getUserId();
  • 在order啟動類OrderApplication中的RestTemplate添加負(fù)載均衡注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
	return new RestTemplate();
}
  • 分別調(diào)用order接口兩次,傳參101和102,看它遠(yuǎn)程調(diào)用了哪個(gè)user服務(wù)實(shí)例

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • 可以看到兩個(gè)服務(wù)實(shí)例均有對應(yīng)的日志,成功!

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

二、Ribbon

1、負(fù)載均衡的原理

分析:

我在瀏覽器中直接訪問http://userservice/user/,訪問失敗,這是因?yàn)閡serservice既不是可用域名,也不是IP。那order調(diào)用到user服務(wù)的過程中經(jīng)歷了什么呢?

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

  • order發(fā)起請求
  • Ribbon攔截請求,拿到服務(wù)名,向eureka拉取信息
  • eureka返回服務(wù)列表信息給Ribbon
  • Ribbon將請求輪詢到相應(yīng)的服務(wù)地址上去

具體信息,在源碼中打斷點(diǎn)來調(diào)試看看。

2、源碼分析

@LoadBalanced注解,就標(biāo)識了調(diào)用方當(dāng)前這個(gè)restTemplate這個(gè)對象發(fā)起的請求,要被Ribbon攔截

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon
LoadBalancerInterceptor實(shí)現(xiàn)了ClientHttpRequestInterceptor接口:

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

在LoadBalancerInterceptor接口重寫的intercent方法上打斷點(diǎn),調(diào)用order接口(中途會對user服務(wù)發(fā)起遠(yuǎn)程調(diào)用),斷點(diǎn)進(jìn)入到了這里:

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

繼續(xù)往下,看到了Ribbon對象

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

繼續(xù)往下:成功從eureka拿到服務(wù)列表信息

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon
繼續(xù)往下調(diào)試,看到了IRule這個(gè)接口,決定了負(fù)載均衡的策略

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

以上,調(diào)用接口http://localhost:8080/order/102后發(fā)生的事情如圖:
- 接口中途通過restTemple遠(yuǎn)程調(diào)用http://userservice/user/1
- 被負(fù)載均衡攔截器攔截
- 獲取url中的服務(wù)id,即userservice
- 動態(tài)服務(wù)列表均衡器向eureka拉取userservice的信息
- eureka返回服務(wù)列表給DynamicServiceListLoadBalancer
- 通過IRule挑選出某個(gè)服務(wù),返回給RibbonLoadBalancerClient
- 請求被轉(zhuǎn)發(fā)到了某個(gè)一具體的實(shí)例上

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

3、負(fù)載均衡策略

Ribbon的負(fù)載均衡策略是由IRule接口來定義的,它的每一個(gè)子接口就是一種策略。

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

具體的含義為:

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon
以上策略中,Ribbon默認(rèn)的是ZoneAvoidanceRule。想修改負(fù)載均衡策略有這兩種方法:

代碼方式:在order-service中的OrderApplication類中,定義一個(gè)新的IRule:

@Bean
public IRule randomRule(){
	return new RandomRule();  //改為隨機(jī)
}

配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改規(guī)則

userservice: 
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  #負(fù)載均衡規(guī)則

此時(shí),多次調(diào)用order接口(代碼中途遠(yuǎn)程調(diào)用user):

http://localhost:8080/order/102

可以看到轉(zhuǎn)發(fā)到user實(shí)例上的請求不再有明顯規(guī)律。

4、饑餓加載

重啟order服務(wù),然后兩次訪問order接口,發(fā)現(xiàn)耗時(shí)相差巨大:

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon
【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon

Ribbon默認(rèn)是采用懶加載,即第一次訪問時(shí)才會去創(chuàng)建LoadBalanceClient,因此請求時(shí)間會很長。

饑餓加載則會在項(xiàng)目啟動時(shí)創(chuàng)建,降低第一次訪問的耗時(shí),通過下配置開啟饑餓加載:

ribbon:
  eager-load: 
    enabled: true #開啟饑餓加載
    clients: userservice  # 指定對userservice這個(gè)服務(wù)饑餓加載
       
# clients為list,可添加多個(gè)

【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon文章來源地址http://www.zghlxwxcb.cn/news/detail-455838.html

到了這里,關(guān)于【SpringCloud】二、服務(wù)注冊發(fā)現(xiàn)Eureka與負(fù)載均衡Ribbon的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • springcloud五大組件:Eureka:注冊中心、Zuul:服務(wù)網(wǎng)關(guān)、Ribbon:負(fù)載均衡、Feign:服務(wù)調(diào)用、Hystix:熔斷器

    Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù),主要用于定位運(yùn)行在AWS域中的中間層服務(wù),以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的。 SpringCloud將它集成在其子項(xiàng)目spring-cloud-netflix中,以實(shí)現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功能。 Eureka包含兩個(gè)組件:Eureka Server和Eure

    2024年04月10日
    瀏覽(22)
  • 38.SpringCloud—注冊中心(eureka/nacos)、負(fù)載均衡Ribbon

    38.SpringCloud—注冊中心(eureka/nacos)、負(fù)載均衡Ribbon

    目錄 一、SpringCloud。 (1)認(rèn)識微服務(wù)。 (1.1)單體架構(gòu)與分布式架構(gòu)(微服務(wù))。 (1.2)微服務(wù)技術(shù)對比。 (1.3)SpringCloud。 (2)服務(wù)拆分及遠(yuǎn)程調(diào)用。 (2.1)服務(wù)拆分。 (2.2)遠(yuǎn)程調(diào)用。 (3)提供者與消費(fèi)者。 (4)Eureka注冊中心。 (4.1)Eureka的作用。? (4.2)搭建

    2024年02月09日
    瀏覽(28)
  • SpringCloud實(shí)用篇1——eureka注冊中心 Ribbon負(fù)載均衡原理 nacos注冊中心

    SpringCloud實(shí)用篇1——eureka注冊中心 Ribbon負(fù)載均衡原理 nacos注冊中心

    單體架構(gòu): 將業(yè)務(wù)的所有功能集中在一個(gè)項(xiàng)目中開發(fā),打成一個(gè)包部署。 優(yōu)點(diǎn):架構(gòu)簡單;部署成本低(打jar包、部署、負(fù)載均衡就完成了) 缺點(diǎn):耦合度高(維護(hù)困難、升級困難,不利于大項(xiàng)目開發(fā)) 分布式架構(gòu) 根據(jù)業(yè)務(wù)功能對系統(tǒng)做拆分,每個(gè)業(yè)務(wù)功能模塊作為獨(dú)立

    2024年02月13日
    瀏覽(19)
  • springcloud Eureka服務(wù)注冊與發(fā)現(xiàn)

    springcloud Eureka服務(wù)注冊與發(fā)現(xiàn)

    代碼上傳到 :https://github.com/13thm/study_springcloud/tree/main/days3 什么是服務(wù)治理 Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實(shí)現(xiàn)服務(wù)治理 什么是服務(wù)注冊與發(fā)現(xiàn) Eureka采用了CS的設(shè)計(jì)架構(gòu),Eureka Server 作為服務(wù)注冊功能的服務(wù)器,它是服務(wù)注冊中心。而系統(tǒng)中的其他微服務(wù),使

    2024年01月18日
    瀏覽(56)
  • 【SpringCloud】Eureka原理分析、搭建Eureka服務(wù)、服務(wù)注冊、服務(wù)發(fā)現(xiàn)

    【SpringCloud】Eureka原理分析、搭建Eureka服務(wù)、服務(wù)注冊、服務(wù)發(fā)現(xiàn)

    ??個(gè)人主頁: ?? 葉落閑庭 ??我的專欄:?? c語言 數(shù)據(jù)結(jié)構(gòu) javaEE 操作系統(tǒng) Redis 石可破也,而不可奪堅(jiān);丹可磨也,而不可奪赤。 當(dāng)有兩個(gè)服務(wù),第一個(gè)服務(wù)需要遠(yuǎn)程調(diào)用第二個(gè)服務(wù),采用的方式是發(fā)起一次HTTP請求,在之前的代碼中是將服務(wù)提供者的ip和端口號硬編碼到

    2024年02月07日
    瀏覽(32)
  • SpringCloud服務(wù)注冊與發(fā)現(xiàn)組件Eureka(五)

    SpringCloud服務(wù)注冊與發(fā)現(xiàn)組件Eureka(五)

    Eureka github 地址: https://github.com/Netflix/eureka Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù),主要用于定位運(yùn)行在AWS域中的中間層服務(wù),以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的。SpringCloud將它集成在其子項(xiàng)目spring-cloud-netflix中,以實(shí)現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功

    2024年02月09日
    瀏覽(91)
  • 什么是SpringCloud Eureka服務(wù)注冊與發(fā)現(xiàn)

    什么是SpringCloud Eureka服務(wù)注冊與發(fā)現(xiàn)

    ??前言 本篇博文是關(guān)于SpringCloud Eureka 介紹,希望你能夠喜歡 ??個(gè)人主頁:晨犀主頁 ??個(gè)人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力???? ??歡迎大家:這里是CSDN,我總結(jié)知識的地方,歡迎來到我的博客,感謝大家的觀看?? 如果文

    2024年02月09日
    瀏覽(34)
  • 【SpringCloud微服務(wù)】- Eureka服務(wù)注冊與服務(wù)發(fā)現(xiàn)Discovery

    【SpringCloud微服務(wù)】- Eureka服務(wù)注冊與服務(wù)發(fā)現(xiàn)Discovery

    Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù),主要用于定位運(yùn)行在AWS域中的中間層服務(wù),以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的。 SpringCloud將它集成在其子項(xiàng)目spring-cloud-netflix中,以實(shí)現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功能。 Eureka包含兩個(gè)組件: Eureka Server 和 E

    2024年02月03日
    瀏覽(25)
  • SpringCloud_Eureka服務(wù)的注冊與發(fā)現(xiàn)

    SpringCloud_Eureka服務(wù)的注冊與發(fā)現(xiàn)

    分布式:分布式解決的是系統(tǒng)性能問題: 即 解決系統(tǒng)部署上單點(diǎn)的問題 ,盡量讓組成系統(tǒng)的子系統(tǒng)分散在不同的機(jī)器上進(jìn)而提高系統(tǒng)的吞吐能力。 即多個(gè)相同的子系統(tǒng)在不同的服務(wù)器上。 分布式系統(tǒng)架構(gòu)存在問題通過服務(wù)治理解決。 微服務(wù):將系統(tǒng)的業(yè)務(wù)功能劃分為極小

    2023年04月22日
    瀏覽(15)
  • SpringCloud 教程 | 第一篇: 服務(wù)的注冊與發(fā)現(xiàn)(Eureka)

    SpringCloud 教程 | 第一篇: 服務(wù)的注冊與發(fā)現(xiàn)(Eureka)

    一、spring cloud簡介 spring cloud 為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)的一些工具,包括配置管理、服務(wù)發(fā)現(xiàn)、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。它運(yùn)行環(huán)境簡單,可以在開發(fā)人員的電腦上跑。另外說明spring cloud是基于springboot的,所以需

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包