摘要:概要什么是使用獲取服務(wù)調(diào)用整合構(gòu)建集群什么是模塊提供的功能是被動(dòng)式的服務(wù)發(fā)現(xiàn)什么是服務(wù)發(fā)現(xiàn)服務(wù)發(fā)現(xiàn)就像聊天室一個(gè)每個(gè)用戶來的時(shí)候去服務(wù)器上注冊這樣他的好友們就能看到你你同時(shí)也將獲取好友的上線列表在微服務(wù)中服務(wù)就相當(dāng)于聊天室的用戶而服務(wù)注冊中
概要
什么是Spring Cloud Eureka?什么是Spring Cloud Eureka?
使用Eureka獲取服務(wù)調(diào)用
Eureka整合Spring Config Server
構(gòu)建Eureka Server集群
Spring Cloud Eureka 模塊提供的功能是被動(dòng)式的服務(wù)發(fā)現(xiàn).
什么是服務(wù)發(fā)現(xiàn)?
服務(wù)發(fā)現(xiàn)就像聊天室一個(gè),每個(gè)用戶來的時(shí)候去服務(wù)器上注冊,這樣他的好友們就能看到你,你同時(shí)也將獲取好友的上線列表.
在微服務(wù)中,服務(wù)就相當(dāng)于聊天室的用戶,而服務(wù)注冊中心就像聊天室服務(wù)器一樣,目前服務(wù)發(fā)現(xiàn)的解決方案有Eureka,Consul,Etcd,Zookeeper,SmartStack,等等.
本文就來講講Eureka,如圖所示,Eureka Client通過HTTP(或者TCP,UDP)去Eureka Server注冊和獲取服務(wù)列表,為了高可用一般會(huì)有多個(gè)Eureka Server組成集群.Eureka會(huì)移除那些心跳檢查未到達(dá)的服務(wù).
這節(jié)我們將構(gòu)建一個(gè)Eureka Server,5個(gè)Eureka Client(分別提供主語,動(dòng)詞,量詞,形容詞,名詞服務(wù)),再構(gòu)建一個(gè)Sentence Eureka Client 來用前面五個(gè)服務(wù)造句.
1.創(chuàng)建mmb-eureka-server
添加依賴-spring-cloud-starter-parent,spring-cloud-starter-eureka-server(pom.xml)
org.springframework.cloud spring-cloud-starter-parent Brixton.SR4 org.springframework.cloud spring-cloud-starter-eureka-server
配置應(yīng)用信息-端口和應(yīng)用名稱 application.yml
server: port: 8010 spring: application: name: mmb-eureka-server
啟動(dòng)服務(wù)
@SpringBootApplication @EnableEurekaServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
打開管理頁面,檢查是否成功
2.創(chuàng)建mmb-eureka-client
添加依賴-spring-cloud-starter-parent,spring-cloud-starter-eureka (pom.xml)
org.springframework.cloud spring-cloud-starter-parent Brixton.SR4 org.springframework.cloud spring-cloud-starter-eureka
配置應(yīng)用信息-eureka server信息,實(shí)際使用的words信息,端口號(hào) (application.yml)
eureka: client: service-url: defaultZone: http://localhost:8010/eureka/ words: 你,我,他 server: port: ${PORT:${SERVER_PORT:0}} # 這個(gè)的意思是隨機(jī)指定個(gè)沒使用的端口
配置啟動(dòng)信息-應(yīng)用名稱 (bootstrap.xml)
spring: application: name: mmb-eureka-client-subject
添加Controller-隨機(jī)獲取words中的一條
@RestController public class Controller { @Value("${words}") String words; @RequestMapping("/") public String getWord() { String[] wordArray = words.split(","); int i = (int)Math.round(Math.random() * (wordArray.length - 1)); return wordArray[i]; } }
啟動(dòng)服務(wù)
@SpringBootApplication @EnableEurekaClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
訪問127.0.0.1/port(看日志可以得到各個(gè)應(yīng)用的port) 看到words里的詞就啟動(dòng)成功了,
其它的verb,acticle,adjective,noun工程類似,就把words,和spring.application.name改成對(duì)應(yīng)的工程名字就好了
3.創(chuàng)建sentence工程
添加依賴-spring-cloud-starter-parent,spring-cloud-starter-eureka,spring-boot-starter-web,spring-boot-starter-actuator (pom.xml)
org.springframework.cloud spring-cloud-starter-parent Brixton.SR4 org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator
配置應(yīng)用信息-eureka server和端口號(hào) (application.yml)
eureka: client: serviceUrl: defaultZone: http://localhost:8010/eureka/ server: port: 8020
配置啟動(dòng)信息-應(yīng)用名稱 (bootstrap.yml)
spring: application: name: mmb-eureka-sentence
添加Controller-用其他eureka-clients(subject,verb,acticle,adjective,noun)的各個(gè)服務(wù)造句
@RestController public class Controller { @Autowired DiscoveryClient client; @RequestMapping("/sentence") public String getSentence() { return getWord("mmb-eureka-client-subject") + " " + getWord("MMB-EUREKA-CLIENT-VERB") + " " + getWord("mmb-eureka-client-article") + " " + getWord("mmb-eureka-client-adjective") + " " + getWord("mmb-eureka-client-noun") + "." ;//大小寫不區(qū)分 } public String getWord(String service) { Listlist = client.getInstances(service); if (list != null && list.size() > 0 ) { URI uri = list.get(0).getUri(); if (uri !=null ) { return (new RestTemplate()).getForObject(uri,String.class); } } return null; } }
啟動(dòng)服務(wù)
@SpringBootApplication @EnableEurekaServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
先啟動(dòng)Eureka Server,再啟動(dòng)Eureka Client,在管理頁面上看到服務(wù)都起成功時(shí),訪問127.0.0.1/8020/sentence 可以得到一個(gè)隨機(jī)組成的句子
Eureka整合Spring Config Server在git的repository里添加application.yml
eureka: client: serviceUrl: defaultZone: http://localhost:8010/eureka/
啟動(dòng)實(shí)戰(zhàn)(一)中的Spring Cloud Config Server
修改各個(gè)client的配置
application.yml移除屬性eureka.client.serviceUrl.defaultZone
bootstrap.yml添加屬性 spring.cloud.config.uri: http://localhost:8001
pom.xml添加依賴spring-cloud-config-client
依次啟動(dòng)Config Server,Eureka Server,Eureka Client,在管理頁面上看到服務(wù)都起成功時(shí),訪問127.0.0.1/8020/sentence 可以得到一個(gè)隨機(jī)組成的句子
-
如果你想把words信息也放入repository呢?在application.yml中添加,如下信息,各個(gè)client啟動(dòng)的時(shí)候加上-Dspring.profiles.active對(duì)應(yīng)到相應(yīng)的啟動(dòng)參數(shù)就行了.
--- spring: profiles: subject words: I,You,He,She,It --- spring: profiles: verb words: ran,knew,had,saw,bought --- spring: profiles: article words: a,the --- spring: profiles: adjective words: reasonable,leaky,suspicious,ordinary,unlikely --- spring: profiles: noun words: boat,book,vote,seat,backpack,partition,groundhog構(gòu)建Eureka Server集群
host文件中添加 (c:WINDOWSsystem32driversetchosts).
127.0.0.1 eureka-primary 127.0.0.1 eureka-secondary 127.0.0.1 eureka-tertiary
Eureka Server的application.yml添加多個(gè)profiles,和instanceId
--- spring: application: name: eureka-server-clustered profiles: primary server: port: 8011 eureka: instance: hostname: eureka-primary --- spring: application: name: eureka-server-clustered profiles: secondary server: port: 8012 eureka: instance: hostname: eureka-secondary --- spring: application: name: eureka-server-clustered profiles: tertiary server: port: 8013 eureka: instance: hostname: eureka-tertiary
此時(shí)Eureka Server 同時(shí)也是個(gè)Eureka Client,需要設(shè)置eureka.client.serviceUrl.defaultZone,值是另外兩個(gè),最終會(huì)是下面這樣
--- spring: application: name: eureka-server-clustered profiles: primary server: port: 8011 eureka: instance: hostname: eureka-primary client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://eureka-secondary:8012/eureka/,http://eureka-tertiary:8013/eureka/ --- spring: application: name: eureka-server-clustered profiles: secondary server: port: 8012 eureka: instance: hostname: eureka-secondary client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://eureka-tertiary:8013/eureka/,http://eureka-primary:8011/eureka/ --- spring: application: name: eureka-server-clustered profiles: tertiary server: port: 8013 eureka: instance: hostname: eureka-tertiary client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://eureka-primary:8011/eureka/,http://eureka-secondary:8012/eureka/
以-Dspring.profiles.active=primary (and secondary, and tertiary)為啟動(dòng)參數(shù)分別啟動(dòng)Eureka Server
修改所有Eureka Client的eureka.client.serviceUrl.defaultZone值為http://eureka-primary:8011/eu...逗號(hào)分隔,無空白),集群啟動(dòng)成功登錄管理頁面查看,如下圖所示即成功
再啟動(dòng)所有的Eureka Clients,查看http://localhost:8020/sentence 是否成功
為了測試容錯(cuò)性,關(guān)掉兩個(gè)Eureka Client,重啟若干個(gè)Eureka Client,觀察啟動(dòng)是否報(bào)錯(cuò),再去查看查看http://localhost:8020/sentence 是否成功
特別感謝 kennyk65
Spring Cloud 中文用戶組 31777218
Spring-Cloud-Config 官方文檔-中文譯本 (本人有參與,哈哈)
Spring Cloud Netflix 官網(wǎng)文檔-中文譯本
本文實(shí)例github地址 mmb-eureka
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/64983.html
摘要:實(shí)戰(zhàn)五概要什么是怎么用常見配置介紹什么是是分布式系統(tǒng)處理超時(shí)和錯(cuò)誤的機(jī)制如下圖所示分布式系統(tǒng)中某個(gè)用戶請求依賴服務(wù)當(dāng)此請求并發(fā)超過的時(shí)候服務(wù)處理速度變慢但是服務(wù)還是被調(diào)用大量請求會(huì)阻塞在服務(wù)器上影響其它整個(gè)服務(wù)在復(fù)雜的分布式架構(gòu)的應(yīng)用程序 Spring Cloud實(shí)戰(zhàn)(五)-Spring Cloud Netflix Hystrix 概要 什么是Spring Cloud Netflix...
摘要:簡介用于監(jiān)控基于的應(yīng)用,它是在的基礎(chǔ)上提供簡潔的可視化。提供了很多功能,如顯示和,顯示在線狀態(tài),的日志級(jí)別管理,線程管理,管理等。 Spring Cloud Admin 簡介 Spring Boot Admin 用于監(jiān)控基于 Spring Boot 的應(yīng)用,它是在 Spring Boot Actuator 的基礎(chǔ)上提供簡潔的可視化 WEB UI。Spring Boot Admin 提供...
摘要:服務(wù)器將要監(jiān)聽的端口不要使用服務(wù)進(jìn)行注冊不要在本地緩存注冊表信息使用一個(gè)新的注解,就可以讓我們的服務(wù)成為一個(gè)服務(wù)服務(wù)發(fā)現(xiàn)客戶端配置以為例需要做件事情成為服務(wù)發(fā)現(xiàn)的客戶端配置對(duì)應(yīng)來說我們只需要配置如下啟動(dòng)運(yùn)行查看。 Spring簡介 為什么要使用微服務(wù) 單體應(yīng)用: 目前為止絕大部分的web應(yīng)用軟件采用單體應(yīng)用,所有的應(yīng)用的用戶UI、業(yè)務(wù)邏輯、數(shù)據(jù)庫訪問都打包在一個(gè)應(yīng)用程序上。 showI...
閱讀 920·2021-11-18 10:02
閱讀 2687·2021-11-11 16:54
閱讀 2856·2021-09-02 09:45
閱讀 716·2019-08-30 12:52
閱讀 2906·2019-08-29 14:04
閱讀 2801·2019-08-29 12:39
閱讀 526·2019-08-29 12:27
閱讀 1957·2019-08-26 13:23