日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Eureka 简介和使用

發布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eureka 简介和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Eureka 服務注冊與發現

    • 服務注冊與發現
    • Eureka與Zookeeper的比較
      • ZooKeeper保證CP
      • Eureka保證AP
    • Eureka是什么?
    • Eureka原理
    • SpringBoot、Spring Cloud 和 Eureka 版本選擇
    • Eureka單機搭建
      • 搭建Eureka服務端
      • 搭建Eureka客戶端的服務提供者
      • 搭建Eureka客戶端的服務消費者
    • Eureka集群搭建
    • eureka 的一些其他配置

服務注冊與發現

在微服務架構中,服務注冊與發現是核心組件之一。Spring Cloud提供了多種服務注冊于發現的實現方式,例如Eureka、Consul、Zookeeper。
服務注冊:將服務所在主機、端口、版本號、通信協議等信息登記到注冊中心上;
服務發現:服務消費者向注冊中心請求已經登記的服務列表,然后得到某個服務的主機、端口號、版本號、通信協議等信息,從而實現對具體服務的調用。

Eureka與Zookeeper的比較

著名的CAP理論指出,一個分布式系統不可能同時滿足C(一致性)、A(可用性)、P(分區容錯性)。
由于分區容錯性在分布式系統中是必須要保證的,因此我們只能在A和C之間進行權衡,ZooKeeper保證的是CP,Eureka保證的是AP。

ZooKeeper保證CP

在ZooKeeper中,當master節點因為網絡故障與其他節點失去聯系時,剩余的節點會重新進行leader選舉,但問題在于,選舉leader需要一定的時間,且選舉期間ZooKeeper集群都是不可用的,這就導致在選舉期間注冊服務癱瘓。在云部署的環境下,因為網絡問題使得ZooKeeper集群失去master節點是大概率事件,雖然服務最終能夠恢復,但是在選舉期間內導致服務注冊長期不可用是難以容忍的。

Eureka保證AP

Eureka優先保證可用性,Eureka各個節點是平等的,某幾個節點掛掉不會影響正常節點的工作,剩余的節點依然可以提供注冊和查詢服務。而Eureka的客戶端在向某個Eureka注冊時如果發現連接失敗,則會自動切換至其他節點,只要有一臺Eureka還在,就能保證注冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證強一致性)。
所以Eureka在網絡故障導致部分節點失去聯系的情況下,只要有一個節點可用,那么注冊和查詢服務就可以正常使用,而不會像zookeeper那樣使得整個注冊服務癱瘓,Eureka優先保證了可用性。

Eureka是什么?

  • Eureka是一個服務治理組件,它主要包括服務注冊與發現,主要用來搭建服務注冊中心。
  • Eureka是一個基于REST的服務,用來定位服務,進行中間層服務的負載均衡和故障轉移;
  • Eureka是Netflix公司開發的,Spring Cloud封裝了Netflix公司開發的Eureka模塊來實現服務注冊與發現,也就是說Spring Cloud對Netflix Eureka進行了二次封裝;

Eureka原理

  • Eureka采用了C-S(客戶端/服務端)的設計架構,也就是Eureka由兩個組件組成:Eureka客戶端和Eureka服務端。
    • Eureka Server:作為服務注冊的服務端,他是服務注冊中心,系統中其他的微服務,使用Eureka的客戶端連接到Eureka 服務端,并維持心跳連接。這樣在EurekaServer中的服務注冊列表就可以看到所有可用服務的信息。
    • Eureka Client:一個Java客戶端,用來簡化與服務器的交互、負載均衡,服務的故障切換等。客戶端同時也內置一個使用輪詢負載均衡的負載均衡算法器,在啟動應用后,向Eureka Server發送心跳(默認周期是30s)。如果Eureka在多個心跳周期內沒有接收到某個節點的心跳,就會將其從服務注冊表中移除(默認周期是90s)。
  • 三大角色
    • Eureka Server:提供服務的注冊與發現
    • Eureka Client - Service Provider:將自身的服務注冊到Eureka Server中,從而使消費者能夠找到。
    • Eureka Clinet - Service Consumer:服務消費方從Eureka Server中獲取服務注冊列表,從而找到消費服務。

SpringBoot、Spring Cloud 和 Eureka 版本選擇

方式一:手動添加依賴

  • 在官網https://start.spring.io/actuator/info可以看到spring boot和spring cloud的版本對映關系:
    比如:我使用的Spring Boot的版本是2.4.2,那么對應的Spring Cloud的版本是2020.0.0
  • 在maven官網可以看到Spring Cloud 2020.0.0對應的Eureka版本
    https://mvnrepository.com
  • 方式二:Idea自動添加依賴(推薦)

    在項目構建中添加模塊Model,選擇Spring

    先在下拉框選擇Spring Boot的版本,然后在Web中選擇Spring Web,在Spring Cloud Discovery中選擇Eureka的Client或者Server。

    這樣,Idea會為我們自己找到和Spring Boot版本對應的Spring Cloud和Eureka版本。

    Eureka單機搭建

    搭建Eureka服務端

    1、添加Spring Boot、Spring Cloud、Eureka Server的相關依賴

    <?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.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ex</groupId><artifactId>eurekaCluster-server-7001</artifactId><version>0.0.1-SNAPSHOT</version><name>eurekaCluster-server-7001</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>2020.0.0</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></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>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement> </project>

    2、配置文件進行配置

    # 端口 server.port=7001 # 應用名稱,會在Eureka中顯示 spring.application.name=eurekaserver-7001 # 注冊中心的hostname eureka.instance.hostname=eureka7002 eureka.instance.non-secure-port=${server.port} # 是否注冊自己的信息到EurekaServer,默認是true eureka.client.register-with-eureka=false # 是否拉取其它服務的信息,默認是true eureka.client.fetch-registry=false # EurekaServer的地址,現在是自己的地址,如果是集群,需要加上其它Server的地址。 eureka.client.service-url.defaultZone=http://localhost:7001/eureka

    3、主入口添加注解 @EnableEurekaServer啟用eureka server
    4、啟動eureka服務端,瀏覽器訪問 http://localhost:7001,可以看到看到Eureka Server 監控頁面。(目前紅框為空,之后服務注冊進來會看到類似下面的內容)

    搭建Eureka客戶端的服務提供者

    1、添加Spring Boot、Spring Cloud、Eureka Client的相關依賴

    <?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.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ex</groupId><artifactId>eureka-client-provider-8001</artifactId><version>0.0.1-SNAPSHOT</version><name>eureka-client-provider-8001</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>2020.0.0</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></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>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement> </project>

    2、配置文件中進行相關配置

    server.port=8001#指定該服務的名字,該名稱將在服務被調用時使用 spring.application.name=eureka-client-provider#Eureka配置:服務注冊到哪里 eureka.client.service-url.defaultZone=http://localhost:7001/eureka

    3、主入口添加注解 @EnableEurekaClient啟用eureka client
    4、添加controller類,配合使用@RestController注解(Eureka是基于REST的)

    //作為服務提供者,要是用 RestController 返回json數據 @RestController public class DeptController {@GetMapping("/test")public String testSpringCloud(){return "Eureka Client 服務提供者";} }

    5、啟動客戶端服務提供者

    搭建Eureka客戶端的服務消費者

    1、添加Spring Boot、Spring Cloud、Eureka Client的相關依賴(同上)
    2、配置文件中進行配置

    server.port=80#指定該服務的名字,該名稱將在服務被調用時使用 spring.application.name=eureka-client-consumer#Eureka配置:服務注冊到哪里 eureka.client.service-url.defaultZone=http://localhost:7001/eureka

    3、主入口添加注解 @EnableEurekaClient啟用eureka client
    4、創建一個controller來訪問服務提供者的服務

    /*** 作為服務消費者,可以返回任何形式的數據,這里使用RestController只是為了測試方便返回json數據*/ @RestController public class TestController {/*** RestTemplate 是一個基于Http協議的工具對象* 我們可以利用這個對象,以http協議發送請求到指定的web服務器中* 在springcloud中可以利用這個對象來訪問服務提供者* 這個對象可以new 也可以交給spring來創建(建議交給spring創建-1.配置config 2.@Resource注入對象)*/@GetMapping("/test")public String test() {RestTemplate restTemplate = new RestTemplate();/*** getForEntity 方法:是一個get方法提交請求,訪問web服務器中的某個請求* 對應著另一個工程中的@GetMapping或者@RequestMapping* 參數1:需要訪問的具體請求路徑 參數2:本次請求服務器返回的數據類型 參數3:可變長度的Object類型數據,表示本次請求中的url參數數據* 注意:由于SpringCloud返回的數據類型全部是Rest風格數據,全是String類型的json數據格式,可以根據具體的數據格式來指定返回類型,交給spring,完成封裝。* 返回值:ResponseEntity對象,封裝著本次請求后的響應體,可以從該對象中獲得本次請求的狀態碼、頭文件信息、響應數據*/// 直接通過http訪問//ResponseEntity<String> result = restTemplate.getForEntity("http://localhost:8001/test", String.class);// 通過注冊中心發現服務并訪問服務:EUREKA-CLIENT-PROVIDER就是服務的名稱(不區分大小寫)ResponseEntity<String> result = restTemplate.getForEntity("http://EUREKA-CLIENT-PROVIDER/test", String.class);System.out.println(result.getStatusCode()); //200 OKSystem.out.println(result.getHeaders()); //[Content-Type:"text/plain;charset=UTF-8", Content-Length:"17", Date:"Thu, 21 Jan 2021 07:03:03 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"]String body = result.getBody();return "hello, Eureka Client 服務消費----" + body;} }

    5、啟動服務消費者
    6、訪問 http://localhost:80/test 可以看到網頁輸出:

    hello, Eureka Client 服務消費----Eureka Client 服務提供者

    Eureka集群搭建

    1、項目結構(1個消費者、2個服務提供者、3個注冊中心)

    2、修改本機host文件

    3、修改配置文件

    Eureka Server:

    # 指定服務注冊中心的位置 eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka,http://eureka7002:7002/eureka,http://eureka7003:7003/eureka

    Eureka Client:(服務提供者和消費者)

    #Eureka配置:服務注冊到哪里 #同時指定多個注冊地址,springcloud底層算法會選擇將數據注冊到某一個注冊中心 eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka,http://eureka7002:7002/eureka,http://eureka7003:7003/eureka

    4、啟動項目,先啟動Eureka Server集群,再啟動Eureka Client。
    5、在瀏覽器訪問 http://eureka7001:7001、http://eureka7002:7002、http://eureka7003:7003

    eureka 的一些其他配置

    # 自我保護模式:關閉以后當服務不能正常向注冊中心提交心跳信息時,在指定的時間點以后注冊中心就會將這個服務移除掉;開啟以后當服務不能正常提交自己的心跳也不會將服務移除;默認是true eureka.server.enable-self-preservation=false # 每隔2s向服務端發送一次心跳,證明自己還活著,默認30s eureka.instance.lease-renewal-interval-in-seconds=2 # 告訴服務端如果我10s之內沒有給你發送心跳代表我故障了,把我移除 eureka.instance.lease-expiration-duration-in-seconds=10

    總結

    以上是生活随笔為你收集整理的Eureka 简介和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。