最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud集成Eureka并實現負載均衡的過程詳解

 更新時間:2023年11月16日 09:36:05   作者:懶羊羊.java  
這篇文章主要給大家詳細介紹了SpringCloud集成Eureka并實現負載均衡的過程,文章通過代碼示例和圖文講解的非常詳細,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下

1.Eureka

你問我Eureka是什么,其實就是一個基于SpringBoot的Java程序。解壓Eureka-server的jar包之后,可以清楚看到一個標準的Java目錄結構(還有一些存放前端頁面的static文件):

在這里插入圖片描述

和nacos非常相似,只不過Eureka作為注冊中心默認是將實例信息存放在eureka-server內存中,這比較適用于開發(fā)環(huán)境與測試環(huán)境,生產環(huán)境中還是建議配置相應的數據庫表,做好數據持久化。在啟動方式上,二者大體相似,shell腳本,maven模塊啟動,docker鏡像…都可以實現。

2.整合Eureka作為注冊中心

給大家提供一個我已經整合好的demo(用戶-支付的場景),實現了服務間的注冊與發(fā)現,并且有數據庫表的支持,可以進行簡單的調用:https://gitee.com/lazy-sheep-java/cloud-eureka.git
下面采用將Eureka-server作為獨立maven模塊的方式啟動來作為注冊中心,其實本質也就是掃描運行Eureka-server的jar包而已,并在此過程中做一些人為配置:

2.1創(chuàng)建maven工程

創(chuàng)建一個父-子結構的maven工程,這個很簡單點點點就好

在這里插入圖片描述

2.2依賴配置(Eureka-Server)

作為獨立的maven模塊啟動Eureka服務,只需要引入核心依賴,配置一個啟動類,并配置相應路徑端口即可提供服務:

        <!--eureka服務端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

在這里插入圖片描述

server:
  port: 10086 # 服務端口
spring:
  application:
    name: eureka-server # eureka的服務名稱
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

2.3業(yè)務配置(Eureka-Client)

在業(yè)務模塊中,都屬于Eureka的客戶端,其核心依賴為:

        <!--eureka客戶端依賴-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

并在相應的模塊中配置服務端的地址

在這里插入圖片描述

直到這里,當啟動eureka-server、user-service模塊之后,登錄http://127.0.0.1:10086就會發(fā)現,Eureka-server作為注冊中心已經成功注冊了user-service服務,就像這樣:

在這里插入圖片描述

2.4服務調用流程

在一個訂單服務(A)調用用戶服務(B)的模型中,A服務從Eureka-server獲取B服務的地址。在A服務中使用RestTemplate通過getForObject()方法發(fā)送HTTP請求到B服務的地址,并處理返回的響應將其封裝為指定的對象。

在這里插入圖片描述

這是一個最簡單的調用鏈路。用非官方語言描述該過程,即A拿著B的使用說明書向B發(fā)消息并得到了回應,而Eureka正是那本說明書

當然,在生產環(huán)境中一個微服務不太可能只會有單實例,更多的是一服務多實例的形式,當被調用方接收到調用請求,會去做負載均衡的處理,從而將請求落到合適實例上。以此來實現高可用、高擴展、高伸縮…

3.集成負載均衡

首先給一個服務多部署幾個實例:

在這里插入圖片描述

效果就像這樣:

在這里插入圖片描述

以前我們拉取的是某個服務的那個實例,現在則是拉取某個服務的實例列表。并在此基礎上通過負載均衡將發(fā)來的請求指定到其中的某一實例上。

那要怎么實現呢?

只需要在服務調用方添加一個注解即可,最簡單的方式就是這樣:

    @Bean
    @LoadBalanced //負載均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

其實,在RestTemplate內部繼承了一個攔截器(實現請求的轉發(fā),也就是負載均衡),而@LoadBalance注解則是幫助開啟了該功能

在這里插入圖片描述

注解本身是沒有實現相關功能的(后面分析實現原理):

在這里插入圖片描述

言歸正傳

現在我們的user服務已經有三個實例,并且已經進入到了負載均衡的列表

在這里插入圖片描述

我們用aop做一個切面,來把負載均衡分發(fā)到服務實例上的信息以日志的形式打印到控制臺,以便更直觀地看到均衡的效果:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

注入Eureka客戶端,通過提供的api來查詢服務的客戶端分發(fā)到的實例信息:

@Aspect
@Component
@Slf4j
public class RequestAspect {
    @Resource
    EurekaClient eurekaClient;

    @Before(value = "execution(* com.yu7.user.web.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        String className = joinPoint.getTarget().getClass().getName();
        log.debug("調用方法:{} ", className + "." + methodName);
        InstanceInfo instanceInfo = eurekaClient.getApplicationInfoManager().getInfo();
        log.debug("負載均衡到的實例信息為:{}",instanceInfo.getInstanceId());
    }
}

當調用方再次發(fā)起請求,觀察控制臺的信息,可以直接看到請求被分發(fā)到了端口為8084的實例上:

在這里插入圖片描述

負載均衡成功實現

以上就是SpringCloud集成Eureka并實現負載均衡的過程詳解的詳細內容,更多關于SpringCloud集成Eureka的資料請關注腳本之家其它相關文章!

相關文章

  • Java中new關鍵字和newInstance方法的區(qū)別分享

    Java中new關鍵字和newInstance方法的區(qū)別分享

    在初始化一個類,生成一個實例的時候,newInstance()方法和new關鍵字除了一個是方法一個是關鍵字外,最主要的區(qū)別是創(chuàng)建對象的方式不同
    2013-07-07
  • SpringBoot整合Mybatis-Plus+Druid實現多數據源配置功能

    SpringBoot整合Mybatis-Plus+Druid實現多數據源配置功能

    本文主要講解springboot?+mybatisplus?+?druid?實現多數據源配置功能以及一些必要的準備及代碼說明,具有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-06-06
  • 基于Java事件監(jiān)聽編寫一個中秋猜燈謎小游戲

    基于Java事件監(jiān)聽編寫一個中秋猜燈謎小游戲

    眾所周知,JavaSwing是Java中關于窗口開發(fā)的一個工具包,可以開發(fā)一些窗口程序,然后由于工具包的一些限制,導致Java在窗口開發(fā)商并沒有太多優(yōu)勢,不過,在JavaSwing中關于事件的監(jiān)聽機制是我們需要重點掌握的內容,本文將基于Java事件監(jiān)聽編寫一個中秋猜燈謎小游戲
    2023-09-09
  • Java數組的聲明與創(chuàng)建示例詳解

    Java數組的聲明與創(chuàng)建示例詳解

    這篇文章主要介紹了Java數組的聲明與創(chuàng)建示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java如何將時間戳格式化為日期字符串

    Java如何將時間戳格式化為日期字符串

    這篇文章主要介紹了Java如何將時間戳格式化為日期字符串問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot 項目如何在tomcat容器中運行的實現方法

    SpringBoot 項目如何在tomcat容器中運行的實現方法

    這篇文章主要介紹了SpringBoot 項目如何在tomcat容器中運行的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • SpringBoot優(yōu)化連接數的方法詳解

    SpringBoot優(yōu)化連接數的方法詳解

    SpringBoot開發(fā)最大的好處是簡化配置,內置了Tomcat,下面這篇文章主要給大家介紹了關于SpringBoot優(yōu)化連接數的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 深入理解jvm啟動參數

    深入理解jvm啟動參數

    JVM的啟動參數是在啟動JVM時可以設置的一些命令行參數,本文詳細的介紹了深入理解jvm啟動參數,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • java實現俄羅斯方塊

    java實現俄羅斯方塊

    這篇文章主要為大家詳細介紹了java實現俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • RabbitMQ集群實現消息的高可用性和負載均衡

    RabbitMQ集群實現消息的高可用性和負載均衡

    文章解釋了RabbitMQ集群的概念及其構建目的,詳細闡述了其底層原理,包括Erlang/OTP的分布式基因、ErlangCookie認證和分布式進程管理,感興趣的朋友跟隨小編一起看看吧
    2026-04-04

最新評論

天气| 衡阳市| 宁安市| 陇南市| 宁化县| 岐山县| 高尔夫| 台湾省| 西藏| 玛沁县| 玛纳斯县| 金寨县| 江都市| 泉州市| 八宿县| 沙洋县| 玛曲县| 昭平县| 衡水市| 盱眙县| 招远市| 贵州省| 伊通| 靖安县| 舟曲县| 佛教| 沙雅县| 鲜城| 卓尼县| 香港| 昌吉市| 五常市| 西乌珠穆沁旗| 龙岩市| 黑河市| 日土县| 黄大仙区| 鄯善县| 贵港市| 秦皇岛市| 神木县|