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

Eureka服務(wù)發(fā)現(xiàn)注冊(cè)實(shí)現(xiàn)教程

 更新時(shí)間:2025年11月28日 09:44:04   作者:烏托邦鋼鐵俠  
文章介紹了微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)機(jī)制,重點(diǎn)講解了Eureka服務(wù)發(fā)現(xiàn)框架的原理、配置和使用方法,Eureka通過(guò)服務(wù)注冊(cè)、心跳檢測(cè)和客戶端緩存機(jī)制來(lái)實(shí)現(xiàn)服務(wù)的高可用性和負(fù)載均衡,文章還詳細(xì)描述了Eureka的一些特性和配置過(guò)程中的注意事項(xiàng),并提供了一些實(shí)戰(zhàn)示例

一、服務(wù)發(fā)現(xiàn)簡(jiǎn)介

1.服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)發(fā)現(xiàn)組件三者之間的關(guān)系大致如下:

  • 各個(gè)微服務(wù)在啟動(dòng)時(shí)時(shí),將自己的網(wǎng)絡(luò)地址等信息注冊(cè)到服務(wù)發(fā)現(xiàn)組件上(eureka,zookeeper,Consul,spring cloud alibaba的nacos),服務(wù)發(fā)現(xiàn)組件會(huì)存儲(chǔ)這些信息。
  • 服務(wù)消費(fèi)者會(huì)從服務(wù)發(fā)現(xiàn)組件查詢服務(wù)提供者的網(wǎng)絡(luò)地址,然后將服務(wù)地址列表緩存到本地,然后根據(jù)服務(wù)名負(fù)載均衡調(diào)用服務(wù)提供者的接口。
  • 各個(gè)微服務(wù)與服務(wù)發(fā)現(xiàn)組件使用一定的機(jī)制來(lái)維持心跳,服務(wù)發(fā)現(xiàn)組件若發(fā)現(xiàn)有服務(wù)沒(méi)有提供心跳,那么服務(wù)發(fā)現(xiàn)組件會(huì)將該服務(wù)剔除。
  • 微服務(wù)網(wǎng)絡(luò)地址發(fā)生變更(例如實(shí)例增減或者IP端口發(fā)生變化等),會(huì)重新注冊(cè)到服務(wù)發(fā)現(xiàn)組件上,使用這種方式,可以避免因網(wǎng)絡(luò)變化導(dǎo)致服務(wù)之間的通訊停止,服務(wù)消費(fèi)者也無(wú)須人工的修改網(wǎng)絡(luò)地址。

二、Eureka簡(jiǎn)介

Eureka是Netflix開(kāi)發(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)功能。

1.Eureka包含兩個(gè)組件:Eureka Server和Eureka Client。

  • Eureka Server提供服務(wù)注冊(cè)服務(wù),各個(gè)節(jié)點(diǎn)啟動(dòng)后,會(huì)在Eureka Server中進(jìn)行注冊(cè),這樣EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到。
  • Eureka Client是一個(gè)java客戶端,用于簡(jiǎn)化與Eureka Server的交互,客戶端同時(shí)也就是一個(gè)內(nèi)置的、使用輪詢負(fù)載算法的負(fù)載均衡器。

2.在應(yīng)用啟動(dòng)后,Eureka Client會(huì)向Eureka Server發(fā)送心跳,默認(rèn)周期為30秒,如果Eureka Server在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳,Eureka Server將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)。

3.Eureka Server之間通過(guò)復(fù)制的方式完成數(shù)據(jù)的同步,Eureka還提供了客戶端緩存機(jī)制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費(fèi)其他服務(wù)的API。綜上,Eureka通過(guò)心跳檢查、客戶端緩存等機(jī)制,確保了系統(tǒng)的高可用性、靈活性和可伸縮性。

三、Eureka一些特性及配置過(guò)程時(shí)需要注意的問(wèn)題

1.Eureka能夠保證AP,即當(dāng)Eureka中的某個(gè)節(jié)點(diǎn)掛掉后,剩余的節(jié)點(diǎn)繼續(xù)仍然可以提供服務(wù)的發(fā)現(xiàn)與注冊(cè)服務(wù)。而Eureka的客戶端在向某個(gè)Eureka或者發(fā)現(xiàn)了當(dāng)前的Eureka不可用時(shí),會(huì)自動(dòng)切換到其他的節(jié)點(diǎn),也就是說(shuō)Eureka的節(jié)點(diǎn)是平等的,只要有一臺(tái)Eureka服務(wù)器在,就能保證服務(wù)的可以繼續(xù)被使用。

2.Eureka的自我保護(hù)機(jī)制,我們?cè)谧?cè)服務(wù)時(shí),如發(fā)生斷網(wǎng)的情況,Eureka不能接收到當(dāng)前服務(wù)的任何心跳請(qǐng)求,Eureka會(huì)在默認(rèn)的90s后,將該服務(wù)進(jìn)行強(qiáng)制剔除,這樣就能保證到網(wǎng)絡(luò)故障時(shí),雖然失去了部分節(jié)點(diǎn),但不會(huì)像zookeeper那樣會(huì)使整個(gè)注冊(cè)服務(wù)癱瘓。當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),新的實(shí)例會(huì)同步到其他節(jié)點(diǎn)中。

3.相關(guān)配置問(wèn)題

服務(wù)端的配置如下,不注冊(cè)自身:

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@localhost:8761/eureka

如果我們需要使用ip地址來(lái)配置的話,先添加一行:

eureka.instance.prefer.IpAddress=true;

如果我們想要關(guān)閉保護(hù)機(jī)制,則設(shè)置以下代碼:

eureka.server.enable-self-preservation=false

設(shè)置eureka剔除服務(wù)的時(shí)間間隔:

eureka.server.eviction-interval-timer-in-ms=3000

需要注意的是要在應(yīng)用類的頭上添加@EnableEurekaServer來(lái)啟用Eureka服務(wù)器。

接下來(lái):訪問(wèn)Eureka,Url為:http://localhost:8761/

可以發(fā)現(xiàn)eureka注冊(cè)中心就啟動(dòng)了?。。?/p>

在這里解釋一下register-with-eureka=fasle和fetch-registry的用法,如果不指定該屬性,服務(wù)端會(huì)將自身作為一個(gè)服務(wù)注冊(cè)到注冊(cè)中心去,因此我們需要在服務(wù)端啟動(dòng)前,指定這兩個(gè)屬性值為false。

假如我們把以下代碼給注釋掉,指定一個(gè)應(yīng)用名,重新啟動(dòng)eureka-server端:

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123

server:
  port: 8888

eureka:
  instance:
    hostname: 192.168.43.246
    prefer-ip-address: true
    instance-id: ${eureka.instance.hostname}:${server.port}
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@${eureka.instance.hostname}:${server.port}/eureka
spring:
  application:
    name: eureka-server

發(fā)現(xiàn)eureka-server也注冊(cè)到eureka上去了!

注:

如果使用ip地址來(lái)注冊(cè)時(shí),一定要添加以下兩行代碼:

第一種方式:使用參數(shù)占位符來(lái)引用已經(jīng)配置好的信息:

eureka.instance.prefer-ip-adderss=true
eureka.instance.instance-id=${eureka.instance.hostname}:${server.port}

第二種方式:使用springcloud來(lái)自動(dòng)獲取ip地址:

eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.instance.instance-id=${eureka.instance.hostname}:${server.port}

eureka客戶端的配置添加上這兩行代碼,可以發(fā)現(xiàn),添加以上兩行代碼的服務(wù)是以ip地址形式來(lái)注冊(cè)的,沒(méi)有添加的則以默認(rèn)的方式來(lái)進(jìn)行注冊(cè),即使用的主機(jī)名的方式來(lái)注冊(cè):

附上使用ip地址注冊(cè)服務(wù)的完整配置:

  • eureka服務(wù)端:
security:
  basic:
    enabled: true
  user:
    name: user
    password: password123

server:
  port: 8888
eureka:
  instance:
    hostname: 192.168.43.246
#    使用ip地址的方式進(jìn)行注冊(cè)
#    prefer-ip-address: true
#    instance-id: ${eureka.instance.hostname}:${server.port}
  client:
#    不注冊(cè)自身
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@${eureka.instance.hostname}:${server.port}/eureka
spring:
  application:
    name: eureka-server
  • eureka客戶端:
security:
  basic:
    enabled: true
  user:
    name: user
    password: password123

server:
  port: 9999
spring:
  application:
    name: eurekaClient
eureka:
  instance:
    hostname: 192.168.43.246
    prefer-ip-address: true
    instance-id: ${eureka.instance.hostname}:${server.port}
  client:
   service-url:
      defaultZone: http://user:password123@${eureka.instance.hostname}:8888/eureka

此處的server-url的端口號(hào)要為服務(wù)端的端口號(hào)。注: 是 deafaultZone, 不是default-zone

附:使用指定的ip去注冊(cè)

客戶端配置如下,如果你在pom文件中添加了如下依賴,客戶端可以不用在啟動(dòng)類上面添加@EnableEurekaClient注解。

只需要在applicantion.properties文件中添加配置即可:

eureka客戶端和eureka服務(wù)端:

 <!-- eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.2.3.RELEASE</version>
        </dependency>

        <!--eureka-client-->

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.2.3.RELEASE</version>
        </dependency>

四、EurekaServer和EurekaClient的作用分析

1. EurekaServer提供服務(wù)發(fā)現(xiàn)的能力,當(dāng)有服務(wù)來(lái)注冊(cè)時(shí),EurekaServer會(huì)將這些服務(wù)的信息存儲(chǔ)到起來(lái)。

2. EurekaClient是一個(gè)java客戶端,可以與服務(wù)發(fā)現(xiàn)組件來(lái)交互。

3. 續(xù)約。微服務(wù)啟動(dòng)后,會(huì)默認(rèn)底向EurekaServer發(fā)送心跳,默認(rèn)時(shí)間為30s,這樣的作用就是續(xù)約自己的租約。

4. 剔除。如果Eureka在一定時(shí)間內(nèi)沒(méi)有收到客戶端的心跳,那么EurekaServer會(huì)剔除掉沒(méi)有發(fā)生心跳客戶端,默認(rèn)時(shí)間為90s。

5. 緩存。EurekaClient會(huì)緩存服務(wù)器的信息,這種方式的好處是當(dāng)EurekaServer宕機(jī)時(shí),,服務(wù)消費(fèi)者依然可以訪問(wèn)服務(wù)。

6. eureka 服務(wù)器默認(rèn)是將自身注冊(cè)到服務(wù)器里??梢允褂萌缦麓a不講自身注冊(cè)進(jìn)去:

eureka:
  client:
#    不注冊(cè)自身
#    register-with-eureka: false

7. 如果設(shè)置多個(gè)eureka時(shí),需要設(shè)置 eureka.client.fetchRegistry=true,表示多個(gè)服務(wù)器之間的數(shù)據(jù)同步。單個(gè)節(jié)點(diǎn)直接設(shè)置成false即可。

五、Eureka開(kāi)發(fā)實(shí)戰(zhàn)

1. 在Spring Cloud Edgware以及更高的版本中,只需要添加相關(guān)依賴,即可自動(dòng)注冊(cè)服務(wù)到EurekaServer中,在實(shí)際的項(xiàng)目中,我們可以直接實(shí)現(xiàn)服務(wù)消費(fèi)者連接服務(wù)提供者,這樣我們可以不用將服務(wù)注冊(cè)到eureka上,以便于調(diào)試。

2. 如果不想將服務(wù)注冊(cè)到EurekaServer上,只需要設(shè)置spring.cloud.service-registry.auto-registration.enabled=false,或使用注解@EnableDiscoveryClient(auto-Registry=false)。

微服務(wù)之間的調(diào)用采用feign來(lái)進(jìn)行遠(yuǎn)程調(diào)用,我們可以不通過(guò)eureka直接調(diào)用服務(wù)提供方,為了便于調(diào)試,可以這樣做:

1) 在resources目錄下新建application-local.yml文件中添加調(diào)用各服務(wù)的url, 該參數(shù)為Feign接口上配置的url。

@FeignClient(
 
        name = "${hcf.application.accounting.name:fec-accounting}",
 
        url = "${hcf.application.payment.url:}",
 
        contextId = "AccountingClient"
 
)
  • 如果是遠(yuǎn)程服務(wù)的提供者,那么配置網(wǎng)關(guān)+地址。
  • 如果是本地的服務(wù)提供者,就是本地的ip地址+端口號(hào)。

2) 啟動(dòng)需要指定profiles文件為local

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解基于IDEA2020.1的JAVA代碼提示插件開(kāi)發(fā)例子

    詳解基于IDEA2020.1的JAVA代碼提示插件開(kāi)發(fā)例子

    這篇文章主要介紹了詳解基于IDEA2020.1的JAVA代碼提示插件開(kāi)發(fā)例子,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • javax.validation.constraints.NotNull找不到的問(wèn)題及解決

    javax.validation.constraints.NotNull找不到的問(wèn)題及解決

    文章主要介紹了Java Bean驗(yàn)證注解的使用,包括`@NotNull`、`@AssertFalse`、`@DecimalMax`、`@Pattern`等,并提供了每個(gè)注解的使用范例
    2026-02-02
  • 如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    這篇文章主要介紹了如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java????????HashMap遍歷方法匯總

    Java????????HashMap遍歷方法匯總

    這篇文章主要介紹了Java????????HashMap遍歷方法匯總,HashMap?的遍歷方法有很多種,不同的?JDK?版本有不同的寫法,下文關(guān)于其遍歷方法總結(jié)需要的小伙伴可以參考一下
    2022-05-05
  • maven打包spring項(xiàng)目縮小體積實(shí)現(xiàn)方式

    maven打包spring項(xiàng)目縮小體積實(shí)現(xiàn)方式

    文章介紹了如何在Maven的pom.xml文件中配置跳過(guò)測(cè)試以縮小Spring項(xiàng)目的打包體積,并提供了具體的配置步驟和運(yùn)行jar包的方法
    2026-03-03
  • Maven分模塊開(kāi)發(fā)與依賴管理和聚合和繼承及屬性深入詳細(xì)介紹

    Maven分模塊開(kāi)發(fā)與依賴管理和聚合和繼承及屬性深入詳細(xì)介紹

    依賴管理是項(xiàng)目管理中非常重要的一環(huán)。幾乎任何項(xiàng)目開(kāi)發(fā)的時(shí)候需要都需要使用到庫(kù)。而這些庫(kù)很可能又依賴別的庫(kù),這樣整個(gè)項(xiàng)目的依賴形成了一個(gè)樹(shù)狀結(jié)構(gòu),而隨著這個(gè)依賴的樹(shù)的延伸和擴(kuò)大,一系列問(wèn)題就會(huì)隨之產(chǎn)生
    2022-10-10
  • IDEA?下?Gradle?刪除多余無(wú)用依賴的處理方法

    IDEA?下?Gradle?刪除多余無(wú)用依賴的處理方法

    這篇文章主要介紹了IDEA下Gradle刪除多余無(wú)用依賴,使用該插件可以一定程度上幫助我們刪除無(wú)用依賴,但是也可能會(huì)多刪除有用的依賴,需要在使用插件自動(dòng)修復(fù)后手動(dòng)檢測(cè)項(xiàng)目,驗(yàn)證是否會(huì)出現(xiàn)問(wèn)題,避免導(dǎo)致上線發(fā)布錯(cuò)誤的負(fù)優(yōu)化
    2022-03-03
  • Fluent Mybatis學(xué)習(xí)之Update語(yǔ)法實(shí)踐

    Fluent Mybatis學(xué)習(xí)之Update語(yǔ)法實(shí)踐

    Fluent MyBatis是一個(gè)MyBatis的增強(qiáng)工具,沒(méi)有對(duì)mybatis做任何修改。本篇文章將詳細(xì)介紹對(duì)Fluent Mybatis中的update語(yǔ)法進(jìn)行驗(yàn)證。代碼具有一定價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-11-11
  • Java中四種訪問(wèn)權(quán)限資料整理

    Java中四種訪問(wèn)權(quán)限資料整理

    這篇文章主要介紹了 Java中四種訪問(wèn)權(quán)限總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java實(shí)現(xiàn)pgsql自動(dòng)更新創(chuàng)建時(shí)間與更新時(shí)間的兩種方式小結(jié)

    java實(shí)現(xiàn)pgsql自動(dòng)更新創(chuàng)建時(shí)間與更新時(shí)間的兩種方式小結(jié)

    本文主要介紹了java實(shí)現(xiàn)pgsql自動(dòng)更新創(chuàng)建時(shí)間與更新時(shí)間的兩種方式小結(jié),主要包括通過(guò)數(shù)據(jù)庫(kù)自身實(shí)現(xiàn)以及通過(guò)mybatisplus的TableField注解添加,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

淮南市| 新乐市| 邻水| 双江| 襄城县| 万宁市| 延边| 安陆市| 鄂托克前旗| 邹平县| 肃南| 和硕县| 宜兰市| 保定市| 永吉县| 礼泉县| 聂拉木县| 北票市| 都安| 和政县| 盈江县| 渝中区| 林周县| 邵武市| 永平县| 右玉县| 枝江市| 鄂伦春自治旗| 治县。| 南平市| 临澧县| 临夏县| 鸡西市| 顺昌县| 商水县| 木兰县| 石城县| 吐鲁番市| 天等县| 武邑县| 多伦县|