<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Eureka這個詞來源於古希臘語,意為“我找到了!我發現了!”。據傳,阿基米德在洗澡時發現浮力原理,高興得來不及穿上衣服,跑到街上大喊:“Eureka! ”。
在Netflix中,Eureka是一個RESTful風格的服務註冊與發現的基礎服務元件。Eureka由兩部分組成,一個是Eureka Server,提供服務註冊和發現功能,即我們上面所說的伺服器端;另一個是Eureka Client,它簡化了使用者端與伺服器端之間的互動。Eureka Client會定時將自己的資訊註冊到Eureka Server中,並從Server中發現其他服務。Eureka Client中內建一個負載均衡器,用來進行基本的負載均衡。
下面我們將通過搭建一個簡單的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用於註冊自身、獲取登入檔資訊以及傳送心跳等。
可以搭建包含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("! "); } }
上述介面將會向請求者返回打招呼的響應資訊。
可以搭建包含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應用後,依次啟動三個應用。
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應用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45