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

SpringCloud中Eureka的配置及使用講解

 更新時間:2023年01月17日 10:50:13   作者:全棧Demo  
Eureka?服務注冊中心,主要用于提供服務注冊功能,當微服務啟動時,會將自己的服務注冊到?Eureka?Server,這篇文章主要介紹了SpringCloud中Eureka的配置及詳細使用,需要的朋友可以參考下

Eureka 采用 CS(Client/Server,客戶端/服務器) 架構,它包括以下兩大組件:

  • Eureka Server:Eureka 服務注冊中心,主要用于提供服務注冊功能。當微服務啟動時,會將自己的服務注冊到 Eureka Server。Eureka Server 維護了一個可用服務列表,存儲了所有注冊到 Eureka Server 的可用服務的信息,這些可用服務可以在 Eureka Server 的管理界面中直觀看到。
  • Eureka Client:Eureka 客戶端,通常指的是微服務系統(tǒng)中各個微服務,主要用于和 Eureka Server 進行交互。在微服務應用啟動后,Eureka Client 會向 Eureka Server 發(fā)送心跳(默認周期為 30 秒)。若 Eureka Server 在多個心跳周期內沒有接收到某個 Eureka Client 的心跳,Eureka Server 將它從可用服務列表中移除(默認 90 秒)。 

比較官方的語言,我們還是通俗易懂的來講一下這個東西,其實就相當于,因為我們使用微服務是把每一個服務單獨進行管理,單獨管理就會出現(xiàn)需要數(shù)據(jù)直接的通信問題,例如:商品的倉庫是一個服務,售賣產(chǎn)品也是一個服務,但現(xiàn)在放在不同的地方,所以假如賣出一件商品,就需要告訴倉庫,應該減少一件產(chǎn)品,這樣就達到了微服務的思想,而我們之前所了解的springboot就不一樣,springboot是將所有的服務都集中在一起管理。

講解完后,我們正式進行Eureka的配置和使用的講解

說真的,講了很多的配置,這個配置確實算是比較復雜,而且出現(xiàn)問題的地方可能有很多,一定要注意很多細節(jié)的處理,不然有可能服務都能啟動就是掛載不上的也有可能出現(xiàn)的,接下來我們先配置最基本啟動Eureka的服務配置

創(chuàng)建基本項目、導包

第一個我們創(chuàng)建項目,首先創(chuàng)建都是基于marven來管理的

 這里有個坑,這個URL的網(wǎng)址有時候會有問題,等一會兒就好了,或者重啟一下idea,還有是可以換成阿里巴巴的URL,不過很多時候是正常的,建項目完成后,我們在當中在導入modules,導入的modules就使用spring Initializr的

 構建完成這個項目后,可以把父文件中的pom文件都刪除,因為我們配置的pom都是在每一個獨立的服務中

我們創(chuàng)建springboot項目的時候,可以勾選后就自定幫助我們把包可以自動的講包依賴在我們的pom文件中,你可以不勾選,因為下面我都會告訴你需要導入的jar包有哪些。

我們構建三個服務,一個是配置服務,另一個是提供者(相當于接口的提供者),另一個是消費者(相當于調用接口)。

配置Eureka服務

第一個配置:使用modules導入進來后,進入pom文件下,導入我們需要的包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo1</name>
    <description>demo1</description>
 
 
    <properties>
        <java.version>1.8</java.version>
 
    </properties>
 
    <dependencies>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
 
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

我這個是最新的springBoot和spirngCloud所以不會出現(xiàn)版本不兼容的問題,但是這里的坑就在于,很多朋友可能就是因為版本兼容的問題,所以這里是會出錯的,如果想了解什么樣的springBoot可以配置什么樣的springCloud可以在marven的官網(wǎng)查看spring-boot-starter去搜索一下就會出來了。一定要看清楚,和我配置的一樣不,不然就會爆紅或者報錯了,還有就是注意,導入進來后,記得刷新一下marven這樣才會下載jar包進來

這里也就是我們的pom文件的配置,下面我們需要配置yml文件對eureka中的具體做配置,創(chuàng)建一個application.yml文件,如果不是綠葉的,可以去看下我寫的另一篇文章 SpringBoot綠葉顯示yml和端口問題

創(chuàng)建完成之后在里面配置如下信息

server:
  port: 8087
spring:
  application:
    name: demo1
eureka:
  instance:
    hostname: localhost #hostname是eureka集群服務器之間的區(qū)分
  client:
    registerWithEureka: false #不向自身注冊。由于該應用為單個注冊中心,所以設置為false,代表不向注冊中心注冊自己
    fetchRegistry: false #不從自身拉取注冊信息。由于單個注冊中心,不拉取自身信息
  server:
    enableSelfPreservation: false # eureka 的自我保護狀態(tài):心跳失敗的比例,在15分鐘內是否超過85%,如果出現(xiàn)了超過的情況,Eureka Server會將當前的實例注冊信息保護起來,同時提示一個警告,一旦進入保護模式,Eureka Server將會嘗試保護其服務注冊表中的信息,不再刪除服務注冊表中的數(shù)據(jù)。也就是不會注銷任何微服務。測試階段將其關閉

這里注意的點是,配置的hostname就是需要訪問的地址,就是注冊中心的名字,其他的配置屬性看看是什么意思,都有注釋的

配置完成后,我們在springboot的啟動項上添加注解@EnableEurekaserver,導入完成之后,我們的服務就是可以跑起來的了,啟動項目,在網(wǎng)頁中打開http://localhost:8087(我這里配置的端口號為8087),就看到下面這個畫面

箭頭這里看到,還沒有實例的服務進來,所以我們接下來就可以開始配置消費者和提供者了。

配置提供者(提供接口)

我們在父級的目錄在添加一個marven的modules,構建完基礎的,我們直接講解配置

配置提供者的pom文件, 如下是配置信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo2</name>
    <description>demo2</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
 
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

一定要看清,我這里配置的是spring-cloud-starter-netflix-eureka-client的,和剛剛spring-cloud-starter-netflix-eureka-serve是不一樣的,在配置完pom文件后,我們在配置當中的application.yml文件

server:
  port: 8082
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    service-url: #  eureka server 的地址, 咱們單實例模式就寫自己好了
      defaultZone: http://localhost:8087/eureka
spring:
  application:
    name: demo2

這里有坑注意

①我們可能會因為版本號的原因導致service-url爆紅,并且defaultZone會沒有,但是沒關系,直接復制過去我的就可以用了

②registerWithEureka的設置要改為true,因為剛剛是服務不用自我去注冊和下面的fetchRegistry拉取自身信息,但是現(xiàn)在已經(jīng)是要用了,就不是提供的服務了,所以需要該問true

③spring-application-name要填,這樣方便在Eureka的網(wǎng)站中更清楚的看到有沒有注冊進來 

④在defaultzone中連接的名字為剛剛啟用服務的名字,后面需要/eureka

我們寫完這些后,因為我們這里寫的是提供者,所以還需要寫一個接口,直接寫一個Controller 

package com.example.demo2.controll;
 
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class Controll {
 
    @GetMapping(value = "/hello")
    public String index() {
        return "hello provider";
    }
}

 我們還需要配置最后的主類,在主類中配置如下

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 
@SpringBootApplication
@EnableEurekaClient
public class Demo2Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class, args);
    }
}

這樣的話就是可以使用了,我們啟動一下,測試看看能不能在Eureka中找到這個名為demo2的服務 

這樣就可以看到多了一個服務叫做Demo2的服務

配置消費者(調用接口) 

這個調用接口中,我們會使用到RestTemplate的用法,如果不了解,可以看下我的這篇Java中使用RestTemplate

 一樣的,我們先構建modules后,配置當中的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo3</name>
    <description>demo3</description>
 
    <properties>
        <java.version>1.8</java.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

這個的配置和提供者的配置pom文件一致,都是服務所以一致,因為在Eureka中可以充當提供者也可以充當消費者。下面配置的是application.yml文件

server:
  port: 8089
 
spring:
  application:
    name: demo3
 
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    service-url: #  eureka server 的地址, 咱們單實例模式就寫自己好了
      defaultZone: http://localhost:8087/eureka
 
  instance:
    status-page-url: http://localhost:8082/hello

這里講解坑的地方

①一樣的,regsiterWithEureka和fetchRegistry需要設置為true

②我這里多配置了一個instance-status-page-url,這是配置的我們需要跳轉的網(wǎng)址,我們就是通過這種方式,可以在不同的端口下進行相互的訪問,也就可以通過發(fā)送請求和獲取數(shù)據(jù)達到數(shù)據(jù)傳輸?shù)男Ч?/p>

下面我們寫發(fā)送請求 

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
public class Contros {
    @Resource
    RestTemplate restTemplate;
    @RequestMapping("/hello")
    public String hello(){
        return restTemplate.getForEntity("http://localhost:8082/hello",String.class).getBody();
    }
}

可能有人會問,為什么剛剛已經(jīng)寫了和這個getForEntity后面一模一樣的地址,這個其實是因為,在yml文件中配置的我們可以在Eureka中直接點擊網(wǎng)址就可以跳轉,沒有設置的話,是不會跳轉的,這里的話就是真實的發(fā)起請求的路徑。

之后我們配置主類

@SpringBootApplication
@EnableDiscoveryClient
public class Demo3Application {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return  new RestTemplate();
    }
 
    public static void main(String[] args) {
        SpringApplication.run(Demo3Application.class, args);
    }
}

這里有一個@Bean下和@LoadBalanced的注解下寫了返回一個發(fā)請求的RestTemplate,這是我們依賴注入RestTemplate并且@LoadBalanced(負載均衡)是系統(tǒng)處理高并發(fā)、緩解網(wǎng)絡壓力和服務端擴容的重要手段之一。

啟用服務,會發(fā)現(xiàn)下圖所示

我們可以看見我們剛剛配置yml中的作用就在這里,我們是可以訪問Demo2的接口的,直接點擊一下就可以跳轉到我們調用的接口中了  

Ribbon

負載均衡(Load Balance) ,簡單點說就是將用戶的請求平攤分配到多個服務器上運行,以達到擴展服務器帶寬、增強數(shù)據(jù)處理能力、增加吞吐量、提高網(wǎng)絡的可用性和靈活性的目的。

常見的負載均衡方式有兩種:

  • 服務端負載均衡
  • 客戶端負載均衡

服務端負載均衡

服務端負載均衡是最常見的負載均衡方式,其工作原理如下圖。
 

圖1:服務端負載均衡工作原理

服務端負載均衡是在客戶端和服務端之間建立一個獨立的負載均衡服務器,該服務器既可以是硬件設備(例如 F5),也可以是軟件(例如 Nginx)。這個負載均衡服務器維護了一份可用服務端清單,然后通過心跳機制來刪除故障的服務端節(jié)點,以保證清單中的所有服務節(jié)點都是可以正常訪問的。

當客戶端發(fā)送請求時,該請求不會直接發(fā)送到服務端進行處理,而是全部交給負載均衡服務器,由負載均衡服務器按照某種算法(例如輪詢、隨機等),從其維護的可用服務清單中選擇一個服務端,然后進行轉發(fā)。

服務端負載均衡具有以下特點:

  • 需要建立一個獨立的負載均衡服務器。
  • 負載均衡是在客戶端發(fā)送請求后進行的,因此客戶端并不知道到底是哪個服務端提供的服務。
  • 可用服務端清單存儲在負載均衡服務器上。

客戶端負載均衡

相較于服務端負載均衡,客戶端服務在均衡則是一個比較小眾的概念。

客戶端負載均衡的工作原理如下圖。

圖2:客戶端負載均衡工作原理

客戶端負載均衡是將負載均衡邏輯以代碼的形式封裝到客戶端上,即負載均衡器位于客戶端??蛻舳送ㄟ^服務注冊中心(例如 Eureka Server)獲取到一份服務端提供的可用服務清單。有了服務清單后,負載均衡器會在客戶端發(fā)送請求前通過負載均衡算法選擇一個服務端實例再進行訪問,以達到負載均衡的目的;

客戶端負載均衡也需要心跳機制去維護服務端清單的有效性,這個過程需要配合服務注冊中心一起完成。

客戶端負載均衡具有以下特點:

  • 負載均衡器位于客戶端,不需要單獨搭建一個負載均衡服務器。
  • 負載均衡是在客戶端發(fā)送請求前進行的,因此客戶端清楚地知道是哪個服務端提供的服務。
  • 客戶端都維護了一份可用服務清單,而這份清單都是從服務注冊中心獲取的。

Ribbon 就是一個基于 HTTP 和 TCP 的客戶端負載均衡器,當我們將 Ribbon 和 Eureka 一起使用時,Ribbon 會從 Eureka Server(服務注冊中心)中獲取服務端列表,然后通過負載均衡策略將請求分攤給多個服務提供者,從而達到負載均衡的目的。

Ribbon 可以與 RestTemplate(Rest 模板)配合使用,以實現(xiàn)微服務之間的調用。

RestTemplate 是 Spring 家族中的一個用于消費第三方 REST 服務的請求框架。RestTemplate 實現(xiàn)了對 HTTP 請求的封裝,提供了一套模板化的服務調用方法。通過它,Spring 應用可以很方便地對各種類型的 HTTP 請求進行訪問。

RestTemplate 針對各種類型的 HTTP 請求都提供了相應的方法進行處理,例如 HEAD、GET、POST、PUT、DELETE 等類型的 HTTP 請求,分別對應 RestTemplate 中的 headForHeaders()、getForObject()、postForObject()、put() 以及 delete() 方法。

最后總結

我們這里主要的配置文件和主要調用的API,都是在Eureka中會常常使用的,我們還可以 在當中配置更多的接口和發(fā)起更多的請求,這樣就達到我們獨立的模塊,但卻可以將數(shù)據(jù)共享出來的效果,這也就是SpringCloud的重要思想,但我們所講的這種是單例的,并不是集群的,還有就是Ribbon了解主要解決了什么問題就可以了,先了解,后深入

到此這篇關于SpringCloud中Eureka的配置及詳細使用的文章就介紹到這了,更多相關SpringCloud Eureka使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis-Plus主鍵生成策略的方法

    Mybatis-Plus主鍵生成策略的方法

    本文主要介紹了Mybatis-Plus主鍵生成策略的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • springboot前后臺數(shù)據(jù)交互的示例代碼

    springboot前后臺數(shù)據(jù)交互的示例代碼

    這篇文章主要介紹了springboot前后臺數(shù)據(jù)交互的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • SpringMVC請求、響應和攔截器的使用實例詳解

    SpringMVC請求、響應和攔截器的使用實例詳解

    攔截器(Interceptor) 它是一個Spring組件,并由Spring容器管理,并不依賴Tomcat等容器,是可以單獨使用的,這篇文章給大家介紹SpringMVC請求、響應和攔截器的使用,感興趣的朋友一起看看吧
    2024-03-03
  • seata-1.4.0安裝及在springcloud中使用詳解

    seata-1.4.0安裝及在springcloud中使用詳解

    這篇文章主要介紹了seata-1.4.0安裝及在springcloud中使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java對象數(shù)組定義與用法詳解

    Java對象數(shù)組定義與用法詳解

    這篇文章主要介紹了Java對象數(shù)組定義與用法,結合實例形式分析了java對象數(shù)組的概念、功能、定義與使用方法,需要的朋友可以參考下
    2019-08-08
  • Java并發(fā)編程示例(九):本地線程變量的使用

    Java并發(fā)編程示例(九):本地線程變量的使用

    這篇文章主要介紹了Java并發(fā)編程示例(九):本地線程變量的使用,有時,我們更希望能在線程內單獨使用,而不和其他使用同一對象啟動的線程共享,Java并發(fā)接口提供了一種很清晰的機制來滿足此需求,該機制稱為本地線程變量,需要的朋友可以參考下
    2014-12-12
  • java實現(xiàn)五子棋程序

    java實現(xiàn)五子棋程序

    這篇文章主要為大家詳細介紹了java實現(xiàn)五子棋程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • SpringBoot結合Swagger2自動生成api文檔的方法

    SpringBoot結合Swagger2自動生成api文檔的方法

    這篇文章主要介紹了SpringBoot結合Swagger2自動生成api文檔的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • SpringBoot整合分布式鎖redisson的示例代碼

    SpringBoot整合分布式鎖redisson的示例代碼

    這篇文章主要介紹了SpringBoot整合分布式鎖redisson,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Java如何替換RequestBody和RequestParam參數(shù)的屬性

    Java如何替換RequestBody和RequestParam參數(shù)的屬性

    近期由于接手的老項目中存在所有接口中新增一個加密串來給接口做一個加密效果,所以就研究了一下Http請求鏈路,發(fā)現(xiàn)可以通過?javax.servlet.Filter去實現(xiàn),這篇文章主要介紹了Java替換RequestBody和RequestParam參數(shù)的屬性,需要的朋友可以參考下
    2023-10-10

最新評論