亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringCloud集成Eureka并實(shí)現(xiàn)負(fù)載均衡的過程詳解

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

1.Eureka

你問我Eureka是什么,其實(shí)就是一個(gè)基于SpringBoot的Java程序。解壓Eureka-server的jar包之后,可以清楚看到一個(gè)標(biāo)準(zhǔn)的Java目錄結(jié)構(gòu)(還有一些存放前端頁(yè)面的static文件):

在這里插入圖片描述

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

2.整合Eureka作為注冊(cè)中心

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

2.1創(chuàng)建maven工程

創(chuàng)建一個(gè)父-子結(jié)構(gòu)的maven工程,這個(gè)很簡(jiǎn)單點(diǎn)點(diǎn)點(diǎn)就好

在這里插入圖片描述

2.2依賴配置(Eureka-Server)

作為獨(dú)立的maven模塊啟動(dòng)Eureka服務(wù),只需要引入核心依賴,配置一個(gè)啟動(dòng)類,并配置相應(yīng)路徑端口即可提供服務(wù):

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

在這里插入圖片描述

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

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

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

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

并在相應(yīng)的模塊中配置服務(wù)端的地址

在這里插入圖片描述

直到這里,當(dāng)啟動(dòng)eureka-server、user-service模塊之后,登錄http://127.0.0.1:10086就會(huì)發(fā)現(xiàn),Eureka-server作為注冊(cè)中心已經(jīng)成功注冊(cè)了user-service服務(wù),就像這樣:

在這里插入圖片描述

2.4服務(wù)調(diào)用流程

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

在這里插入圖片描述

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

當(dāng)然,在生產(chǎn)環(huán)境中一個(gè)微服務(wù)不太可能只會(huì)有單實(shí)例,更多的是一服務(wù)多實(shí)例的形式,當(dāng)被調(diào)用方接收到調(diào)用請(qǐng)求,會(huì)去做負(fù)載均衡的處理,從而將請(qǐng)求落到合適實(shí)例上。以此來實(shí)現(xiàn)高可用、高擴(kuò)展、高伸縮…

3.集成負(fù)載均衡

首先給一個(gè)服務(wù)多部署幾個(gè)實(shí)例:

在這里插入圖片描述

效果就像這樣:

在這里插入圖片描述

以前我們拉取的是某個(gè)服務(wù)的那個(gè)實(shí)例,現(xiàn)在則是拉取某個(gè)服務(wù)的實(shí)例列表。并在此基礎(chǔ)上通過負(fù)載均衡將發(fā)來的請(qǐng)求指定到其中的某一實(shí)例上。

那要怎么實(shí)現(xiàn)呢?

只需要在服務(wù)調(diào)用方添加一個(gè)注解即可,最簡(jiǎn)單的方式就是這樣:

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

其實(shí),在RestTemplate內(nèi)部繼承了一個(gè)攔截器(實(shí)現(xiàn)請(qǐng)求的轉(zhuǎn)發(fā),也就是負(fù)載均衡),而@LoadBalance注解則是幫助開啟了該功能

在這里插入圖片描述

注解本身是沒有實(shí)現(xiàn)相關(guān)功能的(后面分析實(shí)現(xiàn)原理):

在這里插入圖片描述

言歸正傳

現(xiàn)在我們的user服務(wù)已經(jīng)有三個(gè)實(shí)例,并且已經(jīng)進(jìn)入到了負(fù)載均衡的列表

在這里插入圖片描述

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

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

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

@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("調(diào)用方法:{} ", className + "." + methodName);
        InstanceInfo instanceInfo = eurekaClient.getApplicationInfoManager().getInfo();
        log.debug("負(fù)載均衡到的實(shí)例信息為:{}",instanceInfo.getInstanceId());
    }
}

當(dāng)調(diào)用方再次發(fā)起請(qǐng)求,觀察控制臺(tái)的信息,可以直接看到請(qǐng)求被分發(fā)到了端口為8084的實(shí)例上:

在這里插入圖片描述

負(fù)載均衡成功實(shí)現(xiàn)

以上就是SpringCloud集成Eureka并實(shí)現(xiàn)負(fù)載均衡的過程詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringCloud集成Eureka的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論