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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

浅谈SpringCloud (二) Eureka服务发现组件

發(fā)布時間:2025/7/14 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈SpringCloud (二) Eureka服务发现组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上面學習到了如何由一個程序訪問另一個程序,那么如果使用SpringCloud來進行訪問,該如何訪問吶?

可以借助Eureka服務發(fā)現(xiàn)組件進行訪問。

可以借助官方文檔:https://spring.io/projects/spring-cloud?。? 中文文檔:https://springcloud.cc/

Eureka

Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實現(xiàn)服務注冊和發(fā)現(xiàn)。Eureka 采用了 C-S 的設計架構。Eureka Server 作為服務注冊功能的服務器,它是服務注冊中心。而系統(tǒng)中的其他微服務,使用 Eureka 的客戶端連接到 Eureka Server,并維持心跳連接。這樣系統(tǒng)的維護人員就可以通過 Eureka Server 來監(jiān)控系統(tǒng)中各個微服務是否正常運行。Spring Cloud 的一些其他模塊(比如Zuul)就可以通過 Eureka Server 來發(fā)現(xiàn)系統(tǒng)中的其他微服務,并執(zhí)行相關的邏輯。

Eureka由兩個組件組成:Eureka服務器和Eureka客戶端。Eureka服務器用作服務注冊服務器。Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、作為輪詢負載均衡器,并提供服務的故障切換支持。Netflix在其生產(chǎn)環(huán)境中使用的是另外的客戶端,它提供基于流量、資源利用率以及出錯狀態(tài)的加權負載均衡。

?

上圖是github了Eureka的基本架構:Eureka Server提供服務注冊和發(fā)現(xiàn)。其他的應用客戶端。

SpringCloud的Eureka服務

1.將項目變成 SpringCloud項目,父容器添加依賴。

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Brixton.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies> </dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies>

?

2.新建一個eureke的maven工程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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springclouddemo</artifactId><groupId>com.aomeibox</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>eureka</artifactId><name>eureka</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- eureka-server 依賴 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>1.4.4.RELEASE</version></dependency><!-- 安全依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency></dependencies></project>

配置主函數(shù),設置成Eureka Server,并啟動項目并運行。

@SpringBootApplication @EnableEurekaServer public class EurekaApp {public static void main( String[] args ){SpringApplication.run(EurekaApp.class);} }

?

訪問eureka的時候需要輸入用戶名和密碼,默認用戶名是user,密碼則需要從控制臺查找,SpringCloud生成了一個隨機默認的。

如果需要修改用戶名和密碼,則需要重新配置application.yml文件中的信息。

server:port: 10000#以為當前的eureka是單機的,所以需要設置一些配置 eureka:client:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://root:123@localhost:10000/eureka # defaultZone: http://192.168.1.125:10000/eureka/security:basic:enabled: true #開啟安全配置,也就是需要安全密碼,如果不需要,設置為false即可,注意,這個參數(shù)必須放在application.yml中,不允許放在bootstrap.yml中user:name: rootpassword: 123 #在配置了用戶的用戶名和密碼后,可以修改訪問地址為curl風格

?消費者和服務提供者注冊到Eureka中

1.修改provider項目的pom.xml文件。

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>1.4.0.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>

2.修改主函數(shù)。

@SpringBootApplication @EnableEurekaClient //啟用 eureka 客戶端 public class ProviderUser {public static void main( String[] args ) {SpringApplication.run(ProviderUser.class);} }?

3.啟動eureka服務和provider,可以看到已經(jīng)注冊到Eureka中了。

4.編寫conroller類,進行測試

@RestController public class UserController {@Autowiredprivate EurekaClient eurekaClient;@GetMapping("/user/{id}")public User getUser(@PathVariable Integer id){return new User(id);}@GetMapping("/eurekaInfo")public String info(){InstanceInfo eureka = eurekaClient.getNextServerFromEureka("provider-user", false);return eureka.getHomePageUrl();}}

5.customr如上修改。就會有兩個項目注冊到Eureka中了。

?6.修改customer中的controller代碼。再次訪問,還是能拿到provider項目提供的數(shù)據(jù)的。

@RestController public class OrderController {@Autowiredprivate RestTemplate template;//spring提供的一個用于訪問rest接口的模板對象private String url = "http://192.168.1.125:7900/user/";@Autowiredprivate EurekaClient eurekaClient;@GetMapping("/order/{id}")public User getUser(@PathVariable Integer id){InstanceInfo eureka = eurekaClient.getNextServerFromEureka("PROVIDER-USER", false);//訪問提供者獲取數(shù)據(jù)User user = template.getForObject(eureka.getHomePageUrl()+"/user/"+ id, User.class);//通過訪問rest 獲取到json數(shù)據(jù),然后轉(zhuǎn)換成User對象return user;} }

?Eureka細節(jié)修改

1.修改主機服務名稱。

server:port: 7900 #程序啟動后的端口spring:application:name: provider-user #應用名稱eureka:client:serviceUrl:defaultZone: http://root:123@localhost:10000/eurekainstance:instance-id: provider-user7900 # 修改服務名稱

?

注意:修改后,會自動啟動Eureka 的自我保護機制。

2.訪問信息有IP信息提示。

server:port: 7900 #程序啟動后的端口spring:application:name: provider-user #應用名稱eureka:client:serviceUrl:defaultZone: http://root:123@localhost:10000/eurekainstance:instance-id: provider-user7900 # 修改服務名稱prefer-ip-address: true #訪問路徑可以顯示IP地址

3.微服務info信息修改。

info:app.name: providercompany.name: aomeiboxbuild.artifactId: ${project.artifactId}build.version: ${project.version}

?

?

Eureka自我保護機制

某時刻某一個服務不可用了,Eureka并不會立刻清理,依舊會對該微服務的信息進行保存。

  默認情況下,如果EurekeServer在一定時間內(nèi)沒有接收到某個微服務實例的心跳,EurekaServer將會注銷該服務(默認90秒)。但是當網(wǎng)絡分區(qū)發(fā)生故障時,微服務與Eureka無法正常進行通信,以上行為就會變得非常危險--因為微服務本身是健康的,此時不應該注銷這個微服務。Eureka通過”自我保護模式“來解決這個問題 --- 當EurekaServer節(jié)點在短時間內(nèi)丟失過多客戶端時(可能發(fā)生了網(wǎng)絡分區(qū)故障),那么這個節(jié)點就會進入自我保護模式。一旦進入該模式,EurekaServer就會保護服務注冊表中的信息,不再刪除服務注冊表中的數(shù)據(jù)。當網(wǎng)絡回復后,EurekaServer節(jié)點會自動退出自我保護模式。

  在自我保護的模式中,EurekaServer會保護服務注冊表中的信息,不再注銷任何服務實例。當它接收的心跳次數(shù)重新恢復到閾值以上時,該EurekaServer節(jié)點會自動退出自我保護模式。

  在SpringCloud中,可以使用 eureka.server.enable-self-preservation = false 來關閉自我保護機制。

服務發(fā)現(xiàn)

服務中心

服務中心又稱注冊中心,管理各種服務功能包括服務的注冊、發(fā)現(xiàn)、熔斷、負載、降級等,比如dubbo admin后臺的各種功能。

就第一個例子來說,項目A調(diào)用項目B

正常調(diào)用:

有了服務中心之后,任何一個服務都不能直接去掉用,都需要通過服務中心來調(diào)用:

Eureka的集群搭建

注冊中心這么關鍵的服務,如果是單點話,遇到故障就是毀滅性的。在一個分布式系統(tǒng)中,服務注冊中心是最重要的基礎部分,理應隨時處于可以提供服務的狀態(tài)。為了維持其可用性,使用集群是很好的解決方案。Eureka通過互相注冊的方式來實現(xiàn)高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現(xiàn)高可用部署。

多節(jié)點注冊中心

1、host轉(zhuǎn)換,在hosts文件中加入如下配置

127.0.0.1 eureka1 127.0.0.1 eureka2 127.0.0.1 eureka3

?2、創(chuàng)建application-1.yml,作為eureka1服務中心的配置,并將serviceUrl指向eureka2,eureka3.

?3、創(chuàng)建application-2.yml,創(chuàng)建application-3.yml,分別指向另外兩個。

--- spring:application:name: spring-cloud-eurekaprofiles: eureka1 server:port: 8001 eureka:instance:hostname: eureka1client:serviceUrl:defaultZone: http://eureka2:8002/eureka/,http://eureka3:8003/eureka/ --- spring:application:name: spring-cloud-eurekaprofiles: eureka2 server:port: 8001 eureka:instance:hostname: eureka2client:serviceUrl:defaultZone: http://eureka1:8001/eureka/,http://eureka3:8003/eureka/ --- spring:application:name: spring-cloud-eurekaprofiles: eureka3 server:port: 8002 eureka:instance:hostname: eureka3client:serviceUrl:defaultZone: http://eureka1:8001/eureka/,http://eureka2:8002/eureka/

?

?4、打包啟動。依次啟動完成后,瀏覽器輸入:http://eureka1:8000/?,http://eureka2:8000/?,http://eureka3:8000/?即可查看結果。

轉(zhuǎn)載于:https://www.cnblogs.com/JiangLai/p/10172786.html

總結

以上是生活随笔為你收集整理的浅谈SpringCloud (二) Eureka服务发现组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。