日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Cloud 系列之注冊中心 Eureka詳解

瀏覽:91日期:2023-08-04 10:41:58
1.1 簡介 1.1.1 概述

  Netflix Eureka 是由 Netflix 開源的一款基于 REST 的服務發現組件,包括 Eureka Server 及 Eureka Client。2012 年 9 月在 GitHub 上發布 1.1.2 版本,目前 Netflix 以宣布閉源,所以市面上還是以 1.x 版本為主。Eureka 提供基于 REST 的服務,在集群中主要用于服務管理。Eureka 提供了基于 Java 語言的客戶端組件,客戶端組件實現了負載均衡的功能,為業務組件的集群部署創造了條件。使用該框架,可以將業務組件注冊到 Eureka 容器中,這些組件可進行集群部署,Eureka 主要維護這些服務的列表并自動檢查它們的狀態。Spring Cloud Netflix Eureka 是 Pivotal 公司為了將 Netflix Eureka 整合于 Spring Cloud 生態系統提供的版本。  Eureka 包含兩個組件:Eureka Server 和 Eureka Client, Eureka Server 提供服務注冊服務。各個微服務節點通過配置啟動后,會在 EurekaServer 中進行注冊,這樣 EurekaServer 中的服務注冊表中將會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀看到。EurekaClient 通過注冊中心進行訪問。它是一個 Java 客戶端,用于簡化 Eureka Server 的交互,客戶端同時也具備一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。在應用啟動后,將會向 Eureka Server 發送心跳(默認周期為30秒)。如果 Eureka Server 在多個心跳周期內沒有接收到某個節點的心跳,EurekaServer 將會從服務注冊表中把這個服務節點移除(默認90秒)

Spring Cloud 系列之注冊中心 Eureka詳解

1.1.2 原理圖

  一個簡單的 Eureka 集群,需要一個 Eureka 服務器、若干個服務提供者。我們可以將業務組件注冊到 Eureka 服務器中,其他客戶端組件可以向服務器獲取服務并且進行遠程調用。Eureka:就是服務注冊中心(可以是一個集群),對外暴露自己的地址;提供者:啟動后向 Eureka 注冊自己信息(地址,提供什么服務);消費者:向 Eureka 訂閱服務,Eureka 會將對應服務的所有提供者地址列表發送給消費者,并且定期更新;心跳(續約):提供者定期通過 http 方式向 Eureka 刷新自己的狀態。

Spring Cloud 系列之注冊中心 Eureka詳解

1.1.3 相關依賴

<!-- 需要確定 Spring Cloud 版本 --><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>1.2 搭建 EurekaServer 1.2.1 相關依賴

  現在都是子父工程,我們將子模塊中都需要用的依賴放到父工程的 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> <packaging>pom</packaging> <modules> <module>eureka</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.software</groupId> <artifactId>spring-cloud</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 演示就不使用數據庫了 --><!--<dependency>--><!--<groupId>org.springframework.boot</groupId>--><!--<artifactId>spring-boot-starter-data-jpa</artifactId>--><!--</dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- H 版 Spring Cloud 將 server 與 client 分開了,需要導入兩個坐標 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>1.2.2 聲明為 Eureka Server

  在 eureka 服務的啟動類上使用 @EnableEurekaServer,聲明當前應用為 Eureka 服務。

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/29 * @description Eureka 啟動類 */@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}1.2.3 配置文件

server: port: 8081spring: application: name: eurekaServer # 應用名稱,在 Eureka 中作為 id 標識eureka: client: register-with-eureka: false # 不注冊自己 fetch-registry: false # 不拉取自己 service-url: defaultZone: http://127.0.0.1:8081/eureka/ # EurekaServer 的地址,如果是集群,需要加上其它 Server 的地址1.2.4 啟動服務

  啟動服務訪問對應的端口就可以看到以下界面,現在是一個服務都沒有注冊上來。可以把 register-with-eureka,fetch-registry 兩個配置取消就可以看到 eureka 自己了。

Spring Cloud 系列之注冊中心 Eureka詳解

Spring Cloud 系列之注冊中心 Eureka詳解

1.3 提供者1.3.1 聲明為 Eureka Client

  在服務提供者啟動類中使用 @EnableDiscoveryClient,讓 Eureka 能夠發現,掃描到該服務。@EnableEurekaClient 注解也能實現但是該注解只支持 Eureka 作為注冊中心,@EnableDiscoveryClient 可以是其他注冊中心,建議使用 @EnableDiscoveryClient

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/29 * @description 服務提供者啟動類 */@SpringBootApplication@EnableDiscoveryClientpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}1.3.2 配置文件

server: port: 8082spring: application: name: ProviderServer # 應用名稱,在 Eureka 中作為 id 標識eureka: client: service-url: defaultZone: http://127.0.0.1:8081/eurake/1.3.3 提供服務

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/29 * @description */@RestController@RequestMapping('/provider')public class ProviderController { @GetMapping('/get') public Object get() { return '你已經消費了'; }}1.3.4 啟動服務

  啟動服務之后,會自動將自己注冊到 Eureka 中

Spring Cloud 系列之注冊中心 Eureka詳解

1.4 消費者1.4.1 聲明為 Eureka Client

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/29 * @description 消費者啟動類 */@SpringBootApplication@EnableDiscoveryClientpublic class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); }// 將 RestTemplate 交由容器管理 @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }}1.4.2 配置文件

server: port: 8083spring: application: name: ConsumerServer # 應用名稱,在 Eureka 中作為 id 標識eureka: client: service-url: defaultZone: http://127.0.0.1:8081/eureka1.4.3 消費服務

  我們之前使用 RestTemplate 需要自己寫 URI,這樣很不利于維護,而且容易出錯,現在只需要確定應用名稱,利用應用名稱從 Eureka 中就可以獲取到詳細信息。

/** * Created with IntelliJ IDEA. * * @author gaohu9712@163.com * @date 2020/10/29 * @description */@RestController@RequestMapping('/consumer')public class ConsumerController { @Autowired private DiscoveryClient discoveryClient; @GetMapping('/go') public void go() { List<ServiceInstance> providerServer = discoveryClient.getInstances('ProviderServer'); if (0 == providerServer.size()) { return; } ServiceInstance serviceInstance = providerServer.get(0); String host = serviceInstance.getHost(); int port = serviceInstance.getPort(); URI uri = serviceInstance.getUri(); System.out.println('主機:' + host); System.out.println('端口:' + port); System.out.println('uri:' + uri); RestTemplate restTemplate = new RestTemplate(); String str = restTemplate.getForObject(uri + '/provider/get', String.class); System.out.println(str); }}1.4.4 啟動服務

Spring Cloud 系列之注冊中心 Eureka詳解

1.4.5 請求服務

Spring Cloud 系列之注冊中心 Eureka詳解

1.4.6 執行流程

 ♞ 先啟動 eureka 注冊中心 ♞ 啟動服務提供者 provider ♞ 服務提供者啟動后會把自身信息(比如服務地址以別名方式注冊進 eureka) ♞ 消費者 consumer 服務在需要調用接口時,使用服務別名去注冊中心獲取實際的 RPC 遠程調用地址 ♞ 消費者獲得調用地址后,底層實際是利用 HttpClient 技術實現遠程調用 ♞ 消費者獲得服務地址后會緩存在本地 jvm 內存中,默認每間隔 30 秒更新一次服務調用地址

1.5 補充配置1.5.1 actuator 信息完善

  我們現在的服務注冊到 Eureka 上面是沒有 ip 地址的,以后等服務搭建集群是很不方便的,所以我們需要讓他顯示自己的 ip 地址;第二個就是服務名稱為主機 + 服務名 + 端口,這樣就暴露了主機名,我們可以指定顯示的名稱。

Spring Cloud 系列之注冊中心 Eureka詳解

在配置文件中添加如下配置,通過健康檢查(http://ip:port/actuator/health)查看是否修改成功。

eureka: instance: # 實例名稱 instance-id: consumer-01 # 地址中顯示 ip prefer-ip-address: true

Spring Cloud 系列之注冊中心 Eureka詳解

1.5.2 自我保護機制 ☞ 概述

  我們可以看到 Eureka 上有一行紅色的英文 EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.它代表了 Eureka 保護模式的開啟。一旦進入保護模式,Eureka Server 將會嘗試保護其服務注冊表中的信息,不再刪除服務注冊表中的數據,也就是不會注銷任何微服務。  默認情況下,如果 Eureka Server 在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server 將會注銷該實例(默認90秒)。但是當網絡分區故障發生(延時、卡頓、擁擠)時,微服務與 Eureka Server 之間無法正常通信,以上行為可能變得非常危險了——因為微服務本身其實是健康的,此時本不應該注銷這個微服務。為了防止 Eureka Client 可以正常運行,但是與 Eureka Server 網絡不通情況下,Eureka Server 不會立刻將 Eureka Client 服務剔除。

☞ 關閉自我保護機制

  我們之前的 Eureka 截圖中可以看到 DESKTOP-GL7GS52:ConsumerServer:8083,consumer-01 兩個同時存在,這明明是一個服務,修改完配置之后前面的沒有剔除,這就是因為自我保護機制打開了。

# Eureka Server 配置eureka: server: # 關閉自我保護模式, 默認為打開 enable-self-preservation: false # 續期時間,即掃描失效服務的間隔時間 eviction-interval-timer-in-ms: 5000 # Eureka Client 配置eureka: instance: # Eureka Client 給 Eureka Server 發送心跳的時間間隔,默認 30 單位是 s lease-renewal-interval-in-seconds: 1 # Eureka Server 最后一次收到心跳的等待上限,超時剔除服務,默認 90 單位是 s lease-expiration-duration-in-seconds: 21.6 Eureka 高可用1.6.1 Eureka 集群搭建

  在之前的單體中我們的端口是隨意的,但是搭建集群我們需要對端口進行規劃,例如將 808X 端口作為 Eureka 集群的端口。先來看下配置有什么區別,起初我們是將自己注冊到自己上,現在我們需要將自己注冊到其他 Eureka 上,有多個則用 , 隔開。

server: port: 8081spring: application: name: eurekaServereureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://127.0.0.1:8082/eureka server: enable-self-preservation: false eviction-interval-timer-in-ms: 5000

server: port: 8082spring: application: name: eurekaServer_backeureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://127.0.0.1:8081/eureka server: enable-self-preservation: false eviction-interval-timer-in-ms: 5000

Spring Cloud 系列之注冊中心 Eureka詳解Spring Cloud 系列之注冊中心 Eureka詳解

1.6.2 Privoder 集群

  服務提供者的集群配置了多個 Eureka 地址,會將自己同時注冊到多個 Eureka 上,除了配置文件以外其他的服務代碼完全一致,也可以加以區分是哪個提供的服務。需要注意的是 Eureka 集群的應用名稱可以不一致甚至不寫,但是服務提供者的應用名稱必須保持一致,否則會被認為不是一個服務。

server: port: 8091spring: application: name: ProviderServer # 應用名稱,在 Eureka 中作為 id 標識eureka: client: service-url: defaultZone: http://127.0.0.1:8081/eureka, http://127.0.0.1:8082/eureka instance: instance-id: provider-prim prefer-ip-address: true lease-renewal-interval-in-seconds: 1 lease-expiration-duration-in-seconds: 2

server: port: 8092spring: application: name: ProviderServereureka: client: service-url: defaultZone: http://127.0.0.1:8081/eureka, http://127.0.0.1:8082/eureka instance: instance-id: provider-back prefer-ip-address: true lease-renewal-interval-in-seconds: 1 lease-expiration-duration-in-seconds: 2

Spring Cloud 系列之注冊中心 Eureka詳解

1.6.3 遠程調用

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/10/29 * @description */@RestController@RequestMapping('/consumer')public class ConsumerController { @Autowired private DiscoveryClient discoveryClient; @GetMapping('/go') public void go() { List<ServiceInstance> providerServer = discoveryClient.getInstances('ProviderServer'); if (0 == providerServer.size()) { return; } RestTemplate restTemplate = new RestTemplate(); for (ServiceInstance instance : providerServer) { System.out.print(instance.getUri() + '---'); String url = instance.getUri() + '/provider/get'; System.out.println(restTemplate.getForObject(url, String.class)); } }}

Spring Cloud 系列之注冊中心 Eureka詳解

  咱們可以使用服務發現 DiscoveryClient 來獲取服務信息,但是無法自動選擇使用那個服務,這里就涉及到 Ribbon 負載均衡了。我們可以將 RestTemplate 交由 Ioc 管理,在注入時使用 @LoadBalanced 注解進行負載均衡。

☞ 源碼

到此這篇關于Spring Cloud 系列之注冊中心 Eureka的文章就介紹到這了,更多相關Spring Cloud 注冊中心Eureka內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费日本视频一区| 欧美精品影院| 久久伊人亚洲| 国语精品一区| 99久久精品网| 亚洲免费中文| 亚洲视频电影在线| 欧美中文高清| 国产精品亚洲一区二区三区在线观看| 日韩中文影院| 视频在线观看国产精品| 国产日韩欧美三级| 日韩理论片av| 男女性色大片免费观看一区二区| 午夜久久av | 四虎8848精品成人免费网站 | 日韩国产欧美视频| 黑人精品一区| 国产精品毛片| 国产精品伦一区二区| 成人va天堂| 日韩一区网站| 久久精品欧美一区| 国产精品久久久久久模特| 日本久久成人网| 亚洲日本免费电影| 在线天堂中文资源最新版| 老司机精品久久| 黑人精品一区| 国产乱人伦精品一区| 免费视频国产一区| 欧美a级一区二区| 免费成人在线影院| 四虎国产精品免费观看| 日本成人手机在线| 三级一区在线视频先锋| 天堂中文av在线资源库| 久久精品99久久久| 亚洲精品少妇| 亚洲综合二区| 黄色日韩在线| 欧美二三四区| 在线天堂资源www在线污| 久久精品理论片| 欧美激情日韩| 麻豆久久久久久久| 国产乱子精品一区二区在线观看| 亚洲综合小说| 激情欧美一区二区三区| 群体交乱之放荡娇妻一区二区| 国产一区二区三区四区五区 | 日韩欧美精品综合| 国产成人精品一区二区免费看京| 久久国产婷婷国产香蕉| 青青伊人久久| 日韩国产欧美在线播放| 日本不卡视频一二三区| 亚洲2区在线| 日韩1区2区3区| 日韩和欧美一区二区三区| 日韩国产欧美三级| 亚洲va久久久噜噜噜久久| 日本不卡视频在线观看| 国产美女亚洲精品7777| 久久精品资源| 深夜福利视频一区二区| 91精品国产调教在线观看| 国产一区二区三区自拍| 中文无码日韩欧| 久久国内精品视频| 伊伊综合在线| 亚洲一区二区动漫| 日韩精品一二三区| 日韩成人在线看| 国产a亚洲精品| 尹人成人综合网| 国产精品婷婷| 日韩精品视频在线看| 精品视频网站| 在线精品小视频| 日韩av黄色在线| 亚洲精品**中文毛片| 一区视频在线| 麻豆国产91在线播放| 亚洲二区免费| 国产调教精品| 99国产精品免费视频观看| 亚洲另类视频| 久久久久久色 | 精品一区视频| 爽好多水快深点欧美视频| 国产精品久久久久久久免费软件| 欧美国产91| 久久伊人亚洲| 亚洲影院天堂中文av色| 亚洲三级欧美| 亚洲v天堂v手机在线| 美女福利一区二区三区| 日韩欧美2区| 亚洲激情五月| 日韩在线第七页| 国产欧美日韩免费观看| 一区二区视频欧美| 国产成人久久| 国产一精品一av一免费爽爽| 久久大逼视频| 国产精品av久久久久久麻豆网| 国产激情欧美| 国产探花在线精品| 蜜臀91精品一区二区三区| 亚洲午夜黄色| 精品捆绑调教一区二区三区| 免费日韩成人| 国产精品一线| 日韩av网站在线观看| 亚洲精品伊人| 久久福利精品| 亚洲视频国产| 日韩午夜一区| 亚洲精品一二三区区别| 国产精品99一区二区| 香蕉视频亚洲一级| 久久精品国产亚洲夜色av网站| 日韩毛片视频| 在线国产一区| 亚洲人亚洲人色久| 日韩欧美在线精品| 日韩高清不卡在线| 久久不卡日韩美女| 国产精品99精品一区二区三区∴| 国产精品99久久免费| 精品国产精品国产偷麻豆 | 日韩国产激情| 亚洲午夜久久久久久尤物| 亚州av乱码久久精品蜜桃| 亚洲一区日韩在线| 青草综合视频| 综合日韩av| 亚洲免费黄色| 日韩精品第一| 日韩精品水蜜桃| 亚洲理论在线| 国产成人精选| 一区二区亚洲视频| 激情黄产视频在线免费观看| 成人羞羞在线观看网站| 综合国产视频| 91综合网人人| 色综合视频一区二区三区日韩 | 美女av一区| 欧美高清一区| 国产毛片久久久| 99热精品久久| 91精品啪在线观看国产爱臀| 99精品在线免费在线观看| 亚洲欧美专区| 日韩精品水蜜桃| 国产精品第一| 一区二区三区四区日韩| www成人在线视频| 久久99性xxx老妇胖精品| 精品在线99| 国产精品伦理久久久久久| 日韩精品亚洲专区| 婷婷色综合网| 亚洲欧洲美洲av| 精品视频一区二区三区四区五区 | 日韩精品2区| 国产亚洲欧美日韩精品一区二区三区 | 日韩中出av| 欧美在线资源| 日本а中文在线天堂| 日本成人精品| 日韩中文字幕在线一区| 91精品韩国| 国产精品白丝一区二区三区| 亚洲欧美日韩国产综合精品二区| 中文字幕在线高清| 韩国一区二区三区视频| 国产午夜久久av| 在线看片日韩| 日av在线不卡| 日本 国产 欧美色综合| 国产亚洲福利| 伊人精品视频| 亚洲在线成人| 久久高清国产| 久久aⅴ国产紧身牛仔裤| 日韩视频免费| 亚洲色诱最新| 美女91精品| 亚洲天堂av资源在线观看| 蜜臀久久99精品久久久久久9| 蜜桃av一区| 日韩欧美在线精品| 香蕉久久一区| 婷婷成人av| 国产高清亚洲| 丝袜美腿一区| 亚洲精品国产偷自在线观看|