pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Spring?Cloud?Eureka基礎應用及原理

這篇文章主要介紹了Spring?Cloud?Eureka基礎應用,Eureka?Client中內置一個負載均衡器,用來進行基本的負載均衡,下面我們將通過搭建一個簡單的Eureka例子來了解Eureka的運作原理,感興趣的

Eureka簡介

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

搭建Eureka服務注冊中心

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

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

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

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

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

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

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

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

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

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

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

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

搭建Eureka服務提供者

可以搭建包含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的依賴,應用就會自動注冊到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

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

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

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

搭建Eureka服務調用者

可以搭建包含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相關配置,代碼如下所示:

# 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的服務。通過使用可以進行負載均衡的RestTemplate向eureka-client-service發起打招呼的請求,并直接返回對應的響應結果。具體代碼如下所示:

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

Eureka服務注冊和發現

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

2.服務間調用
訪問http:l/localhost:8762/ask,eureka-client將調用eureka-client-service的sayHello服務,向eureka-client-service傳遞服務名,等待eureka-client-service返回請求響應,響應結果如下:

Hello, eureka-client !

RestTemplate將根據服務名eureka-client-service通過預先從eureka-service緩存到本地的注冊表中獲取到eureka-client-service服務的具體地址,從而發起服務間調用。

3.與服務注冊中心交換信息
DiscoveryClient來源于spring-cloud-client-discovery,是Spring Cloud中定義用來服務發現的公共接口,在Spring Cloud的各類服務發現組件中(如Netflix Eureka或Consul)都有相應的實現。它提供從服務注冊中心根據serviceld獲取到對應服務實例信息的能力。當一個服務實例擁有DiscoveryClient的具體實現時,就可以從服務注冊中心中發現其他的服務實例。
在Eureka Client中注入DiscoveryClient,并從Eureka Server獲取服務實例的信息。在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);
}
}

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

Eureka中標準元數據有主機名、IP地址、端口號、狀態頁url和健康檢查url等,這些元數據都會保存在Eureka Server的注冊表中,Eureka Client根據服務名讀取這些元數據,來發現和調用其他服務實例。元數據可以自定義以適應特定的業務場景,這些內容將在下一篇文章進行講解。

到此這篇關于Spring Cloud Eureka基礎應用的文章就介紹到這了,更多相關Spring Cloud  Eureka應用內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

人工智能時代的到來,相信大家已耳濡目染,虹軟免費,離線開放的人臉識別SDK,正推動著全行業進入刷臉時代,下面這篇文章主要給大家介紹了關于如何基于SpringBoot實現人臉識別功能的相關
這篇文章主要介紹了Java中Scanner使用方式:單行/多行輸入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
這篇文章主要介紹了關于Scanner對象的輸入結束標記問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
這篇文章主要介紹了SpringBoot定時任務功能詳細解析,這次的功能開發過程中也算是對其內涵的進一步了解,以后遇到定時任務的處理也更清晰,更有效率了,對SpringBoot定時任務相關知識
這篇文章主要介紹了Spring?MVC基于注解的使用JSON數據處理,json是一種輕量級的數據交換格式,是一種理想的數據交互語言,它易于閱讀和編寫,同時也易于機器解析和生成,本文通過實例
這篇文章主要為大家分享了在SSM項目中實現短信驗證碼登錄功能的示例代碼,文中的實現步驟講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下
主站蜘蛛池模板: 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 风信子发稿-专注为企业提供全球新闻稿发布服务 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 北钻固控设备|石油钻采设备-石油固控设备厂家| 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 开云(中国)Kaiyun·官方网站-登录入口 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 壹作文_中小学生优秀满分作文大全| 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 北京开源多邦科技发展有限公司官网| 高速龙门架厂家_监控杆_多功能灯杆_信号灯杆_锂电池太阳能路灯-鑫世源照明 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 护栏打桩机-打桩机厂家-恒新重工| 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 首页-浙江橙树网络技术有限公司 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | crm客户关系管理系统,销售管理系统,crm系统,在线crm,移动crm系统 - 爱客crm | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 小型数控车床-数控车床厂家-双头数控车床 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 台式低速离心机-脱泡离心机-菌种摇床-常州市万丰仪器制造有限公司 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 火锅底料批发-串串香技术培训[川禾川调官网] |