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

Spring?Cloud?Eureka基礎(chǔ)應(yīng)用及原理

 更新時間:2022年05月17日 15:49:31   作者:桃花鍵神  
這篇文章主要介紹了Spring?Cloud?Eureka基礎(chǔ)應(yīng)用,Eureka?Client中內(nèi)置一個負載均衡器,用來進行基本的負載均衡,下面我們將通過搭建一個簡單的Eureka例子來了解Eureka的運作原理,感興趣的朋友一起看看吧

Eureka簡介

Eureka這個詞來源于古希臘語,意為“我找到了!我發(fā)現(xiàn)了!”。據(jù)傳,阿基米德在洗澡時發(fā)現(xiàn)浮力原理,高興得來不及穿上衣服,跑到街上大喊:“Eureka! ”。
在Netflix中,Eureka是一個RESTful風(fēng)格的服務(wù)注冊與發(fā)現(xiàn)的基礎(chǔ)服務(wù)組件。Eureka由兩部分組成,一個是Eureka Server,提供服務(wù)注冊和發(fā)現(xiàn)功能,即我們上面所說的服務(wù)器端;另一個是Eureka Client,它簡化了客戶端與服務(wù)端之間的交互。Eureka Client會定時將自己的信息注冊到Eureka Server中,并從Server中發(fā)現(xiàn)其他服務(wù)。Eureka Client中內(nèi)置一個負載均衡器,用來進行基本的負載均衡。
下面我們將通過搭建一個簡單的Eureka例子來了解Eureka的運作原理。

搭建Eureka服務(wù)注冊中心

可以搭建包含Eureka Server依賴的Spring Boot項目。主要依賴如下:

在啟動類中添加注解@EnableEurekaServer,代碼如下所示:

@SpringBootApplication
//會為項目自動配置必須的配置類,標(biāo)識該服務(wù)為注冊中心
@EnableEurekaServer
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在application.yml配置文件中添加以下配置,配置注冊中心的端口和標(biāo)識自己為Eureka Server:

server:
  port: 8761
#eureka配置--4部分
#1.dashboard web控制臺
#2.server服務(wù)端配置--配置過期時間等
#3.client客戶端配置--配置注冊發(fā)現(xiàn)地址
#4.instance項目實例
eureka:
  #配置服務(wù)可視化默認開啟
  dashboard:
    enabled: true
    path: /
  instance:
    hostname: localhost
  #這個是euraka暴漏給提供者和消費者服務(wù)發(fā)現(xiàn)注冊用的
  client:
    service-url:
      #defaultZone: http://localhost:8761/eureka不能寫死
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
    #是否注冊到eureka上注冊中心是不用把自己上床到自己的provider
    register-with-eureka: false
    #是否需要到eureka上拉去服務(wù)路徑--consumer需要
    fetch-registry: false

lnstanceld是Eureka服務(wù)的唯一標(biāo)記,主要用于區(qū)分同一服務(wù)集群的不同實例。一般來講,一個Eureka服務(wù)實例默認注冊的Instanceld是它的主機名(即一個主機只有一個服務(wù))。但是這樣會引發(fā)一個問題,一臺主機不能啟動多個屬于同一服務(wù)的服務(wù)實例。為了解決這種情況,spring-cloud-netflix-eureka提供了一個合理的實現(xiàn),如上面代碼中的Instanceld設(shè)置樣式。通過設(shè)置random.value可以使得每一個服務(wù)實例的lnstanceld獨一無二,從而可以唯一標(biāo)記它自身。

Eureka Server既可以獨立部署,也可以集群部署。在集群部署的信況下,EurekaServeri間會進行注冊表信息同步的換作,這時被同步注冊表信息的Eureka Server將會被其他同步注冊表信息的Eureka Server稱為peer。

請注意,上述配置中的service-url指向的注冊中心為實例本身。通常來講,一個Eureka Server也是一個Eureka Client,它會嘗試注冊自己,所以需要至少一個注冊中心的URL來定位對等點peer。如果不提供這樣一個注冊端點,注冊中心也能工作,但是會在日志中打印無法向peer注冊自己的信息。在獨立(Standalone) Eureka Server的模式下,Eureka Server一般會關(guān)閉作為客戶端注冊自己的行為。

Eureka Server與Eureka Client之間的聯(lián)系主要通過心跳的方式實現(xiàn)。心跳(Heartbeat)即Eureka Client定時向Eureka Server匯報本服務(wù)實例當(dāng)前的狀態(tài),維護本服務(wù)實例在注冊表中租約的有效性。

Eureka Server需要隨時維持最新的服務(wù)實例信息,所以在注冊表中的每個服務(wù)實例都需要定期發(fā)送心跳到Server中以使自己的注冊保持最新的狀態(tài).(數(shù)據(jù)一般直接保存在內(nèi)存中)。為了避免Eureka Client在每次服務(wù)間調(diào)用都向注冊中心請求依賴服務(wù)實例的信息,Eureka Client將定時從Eureka Server中拉取注冊表中的信息,并將這些信息緩存到本地,用于服務(wù)發(fā)現(xiàn)。

啟動Eureka Server后,應(yīng)用會有一個主頁面用來展示當(dāng)前注冊表中的服務(wù)實例信息并同時暴露一些基于HTTP協(xié)議的端點在/eureka路徑下,這些端點將由EurekaClient用于注冊自身、獲取注冊表信息以及發(fā)送心跳等。

搭建Eureka服務(wù)提供者

可以搭建包含Eurake Client依賴的Spring Boot項目。主要依賴有:

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>3.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.6.7</version>
</dependency>

啟動類如下:

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

在Spring Cloud的Finchley版本中,只要引入spring-cloud-starter-netflix-eureka-client的依賴,應(yīng)用就會自動注冊到Eureka Server,但是需要在配置文件中添加Eureka Server的地址。在application.yml添加以下配置:

# Eureka配置
eureka:
  instance:
     hostname: client
     instance-id: ${spring.application.name} :$ lvcap.application.instance_id:$ lspring.application.instance_id:$trandom value}}}
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
server :
  port : 8760
spring:
  application:
    rame: eureka-client

為服務(wù)提供者添加一個提供服務(wù)的接口,代碼如下:

@RestContro11er
public class SayHe11oContro11er {
@RequestMapping(value = "/he11o/{name}")
public String sayHe11o(@PathVarivab1e("name") String name){
return "He11o,".concat(name).concat("! ");
}
}

上述接口將會向請求者返回打招呼的響應(yīng)信息。

搭建Eureka服務(wù)調(diào)用者

可以搭建包含Eurake Client依賴的Spring Boot項目。主要依賴有:

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>3.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.6.7</version>
</dependency>

啟動類代碼如下:

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

在application.yml添加eureka-client相關(guān)配置,代碼如下所示:

# Eureka配置
eureka:
  instance:
     hostname: client
     instance-id: ${spring.application.name} :$ lvcap.application.instance_id:$ lspring.application.instance_id:$trandom value}}}
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
server :
  port : 8765
spring:
  application:
    rame: eureka-client

添加一個AskController向eureka-client-service請求sayHello的服務(wù)。通過使用可以進行負載均衡的RestTemplate向eureka-client-service發(fā)起打招呼的請求,并直接返回對應(yīng)的響應(yīng)結(jié)果。具體代碼如下所示:

@RestController
@Configuration
public class DemoController {
//注入本地服務(wù)名
@value("${spring.application. name}")
private string name;
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/ask")
public string ask(){
//從eureka-client-service服務(wù)提供者中請求sayHello服務(wù)
string askHelloFromService = restTemplate.getForEntity("http ://EUREKA-CLIENT-SERVICE/hello/{name}", String.class,name).getBody();
return askHelloFromService;
}
//注入一個可以進行負載均衡的RestTemple用于服務(wù)間調(diào)用@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}

Eureka服務(wù)注冊和發(fā)現(xiàn)

搭建好上述三個Eureka應(yīng)用后,依次啟動三個應(yīng)用。
1.Eureka Server主頁
訪問Eureka Server的主頁http://localhost:8761,可以看到下圖所示的界面。
從圖中可以看到以下信息:
-展示當(dāng)前注冊到Eureka server上的服務(wù)實例信息。
-展示Eureka Server運行環(huán)境的通用信息。
-展示Eureka Server實例的信息。

2.服務(wù)間調(diào)用
訪問http:l/localhost:8762/ask,eureka-client將調(diào)用eureka-client-service的sayHello服務(wù),向eureka-client-service傳遞服務(wù)名,等待eureka-client-service返回請求響應(yīng),響應(yīng)結(jié)果如下:

Hello, eureka-client !

RestTemplate將根據(jù)服務(wù)名eureka-client-service通過預(yù)先從eureka-service緩存到本地的注冊表中獲取到eureka-client-service服務(wù)的具體地址,從而發(fā)起服務(wù)間調(diào)用。

3.與服務(wù)注冊中心交換信息
DiscoveryClient來源于spring-cloud-client-discovery,是Spring Cloud中定義用來服務(wù)發(fā)現(xiàn)的公共接口,在Spring Cloud的各類服務(wù)發(fā)現(xiàn)組件中(如Netflix Eureka或Consul)都有相應(yīng)的實現(xiàn)。它提供從服務(wù)注冊中心根據(jù)serviceld獲取到對應(yīng)服務(wù)實例信息的能力。當(dāng)一個服務(wù)實例擁有DiscoveryClient的具體實現(xiàn)時,就可以從服務(wù)注冊中心中發(fā)現(xiàn)其他的服務(wù)實例。
在Eureka Client中注入DiscoveryClient,并從Eureka Server獲取服務(wù)實例的信息。在chapter4-eureka-client添加一個ServicelnstanceRestController的controller ,如下所示:

@RestController
public class ServiceInstanceRestController {
@Autowired
private DiscoveryClient discoveryClient ;
@RequestMapping(" /service-instances/ {applicationName}")
public List<ServiceInstance> serviceInstancesByApplicationName(
@Pathvariable 
String applicationName(){
return this.discoveryClient.getInstances(applicationName);
}
}

啟動應(yīng)用后,訪問地址http://localhost:8765/service-instancesleureka-client,獲取應(yīng)用名為eureka-client(服務(wù)本身)的服務(wù)實例元數(shù)據(jù),結(jié)果如下所示:

Eureka中標(biāo)準(zhǔn)元數(shù)據(jù)有主機名、IP地址、端口號、狀態(tài)頁url和健康檢查url等,這些元數(shù)據(jù)都會保存在Eureka Server的注冊表中,Eureka Client根據(jù)服務(wù)名讀取這些元數(shù)據(jù),來發(fā)現(xiàn)和調(diào)用其他服務(wù)實例。元數(shù)據(jù)可以自定義以適應(yīng)特定的業(yè)務(wù)場景,這些內(nèi)容將在下一篇文章進行講解。

到此這篇關(guān)于Spring Cloud Eureka基礎(chǔ)應(yīng)用的文章就介紹到這了,更多相關(guān)Spring Cloud  Eureka應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你用java實現(xiàn)學(xué)生成績管理系統(tǒng)(附詳細代碼)

    教你用java實現(xiàn)學(xué)生成績管理系統(tǒng)(附詳細代碼)

    教學(xué)管理系統(tǒng)很適合初學(xué)者對于所學(xué)語言的練習(xí),下面這篇文章主要給大家介紹了關(guān)于如何用java實現(xiàn)學(xué)生成績管理系統(tǒng)的相關(guān)資料,文中給出了詳細的實例代碼,需要的朋友可以參考下
    2023-06-06
  • java.net.ConnectException異常的正確解決方法(親測有效!)

    java.net.ConnectException異常的正確解決方法(親測有效!)

    java.net.ConnectException異常是與網(wǎng)絡(luò)相關(guān)的最常見的Java異常之一,建立從客戶端應(yīng)用程序到服務(wù)器的TCP連接時,我們可能會遇到它,這篇文章主要給大家介紹了關(guān)于java.net.ConnectException異常的正確解決方法,需要的朋友可以參考下
    2024-01-01
  • 非常適合新手學(xué)生的Java線程池超詳細分析

    非常適合新手學(xué)生的Java線程池超詳細分析

    作者是一個來自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗,如有錯誤請指正,將來會不斷的完善筆記,幫助更多的Java愛好者入門
    2022-03-03
  • SpringBoot自動配置Quartz的實現(xiàn)步驟

    SpringBoot自動配置Quartz的實現(xiàn)步驟

    本文主要介紹了SpringBoot自動配置Quartz的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 簡單談?wù)凧ava 中的線程的幾種狀態(tài)

    簡單談?wù)凧ava 中的線程的幾種狀態(tài)

    這篇文章主要介紹了簡單談?wù)凧ava 中的線程的幾種狀態(tài)的相關(guān)資料,需要的朋友可以參考下
    2020-02-02
  • Springboot @Value使用代碼實例

    Springboot @Value使用代碼實例

    這篇文章主要介紹了Springboot @Value使用代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot實現(xiàn)ORM操作MySQL的幾種方法

    SpringBoot實現(xiàn)ORM操作MySQL的幾種方法

    本文主要介紹了SpringBoot實現(xiàn)ORM操作MySQL的幾種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java Swing中JTable渲染器與編輯器用法示例

    Java Swing中JTable渲染器與編輯器用法示例

    這篇文章主要介紹了Java Swing中JTable渲染器與編輯器用法,結(jié)合實例形式較為詳細的分析了Swing中JTable渲染器與編輯器的功能、使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2017-11-11
  • Java反應(yīng)式框架Reactor中的Mono和Flux

    Java反應(yīng)式框架Reactor中的Mono和Flux

    這篇文章主要介紹了Java反應(yīng)式框架Reactor中的Mono和Flux,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Java8處理集合的優(yōu)雅姿勢之Stream

    Java8處理集合的優(yōu)雅姿勢之Stream

    這篇文章主要給大家介紹了關(guān)于Java8優(yōu)雅處理集合之Stream的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論