摘要:概要什么是使用獲取服務調用整合構建集群什么是模塊提供的功能是被動式的服務發現什么是服務發現服務發現就像聊天室一個每個用戶來的時候去服務器上注冊這樣他的好友們就能看到你你同時也將獲取好友的上線列表在微服務中服務就相當于聊天室的用戶而服務注冊中
概要
什么是Spring Cloud Eureka?什么是Spring Cloud Eureka?
使用Eureka獲取服務調用
Eureka整合Spring Config Server
構建Eureka Server集群
Spring Cloud Eureka 模塊提供的功能是被動式的服務發現.
什么是服務發現?
服務發現就像聊天室一個,每個用戶來的時候去服務器上注冊,這樣他的好友們就能看到你,你同時也將獲取好友的上線列表.
在微服務中,服務就相當于聊天室的用戶,而服務注冊中心就像聊天室服務器一樣,目前服務發現的解決方案有Eureka,Consul,Etcd,Zookeeper,SmartStack,等等.
本文就來講講Eureka,如圖所示,Eureka Client通過HTTP(或者TCP,UDP)去Eureka Server注冊和獲取服務列表,為了高可用一般會有多個Eureka Server組成集群.Eureka會移除那些心跳檢查未到達的服務.
這節我們將構建一個Eureka Server,5個Eureka Client(分別提供主語,動詞,量詞,形容詞,名詞服務),再構建一個Sentence Eureka Client 來用前面五個服務造句.
1.創建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
配置應用信息-端口和應用名稱 application.yml
server: port: 8010 spring: application: name: mmb-eureka-server
啟動服務
@SpringBootApplication @EnableEurekaServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
打開管理頁面,檢查是否成功
2.創建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
配置應用信息-eureka server信息,實際使用的words信息,端口號 (application.yml)
eureka: client: service-url: defaultZone: http://localhost:8010/eureka/ words: 你,我,他 server: port: ${PORT:${SERVER_PORT:0}} # 這個的意思是隨機指定個沒使用的端口
配置啟動信息-應用名稱 (bootstrap.xml)
spring: application: name: mmb-eureka-client-subject
添加Controller-隨機獲取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]; } }
啟動服務
@SpringBootApplication @EnableEurekaClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
訪問127.0.0.1/port(看日志可以得到各個應用的port) 看到words里的詞就啟動成功了,
其它的verb,acticle,adjective,noun工程類似,就把words,和spring.application.name改成對應的工程名字就好了
3.創建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
配置應用信息-eureka server和端口號 (application.yml)
eureka: client: serviceUrl: defaultZone: http://localhost:8010/eureka/ server: port: 8020
配置啟動信息-應用名稱 (bootstrap.yml)
spring: application: name: mmb-eureka-sentence
添加Controller-用其他eureka-clients(subject,verb,acticle,adjective,noun)的各個服務造句
@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") + "." ;//大小寫不區分 } 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; } }
啟動服務
@SpringBootApplication @EnableEurekaServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
先啟動Eureka Server,再啟動Eureka Client,在管理頁面上看到服務都起成功時,訪問127.0.0.1/8020/sentence 可以得到一個隨機組成的句子
Eureka整合Spring Config Server在git的repository里添加application.yml
eureka: client: serviceUrl: defaultZone: http://localhost:8010/eureka/
啟動實戰(一)中的Spring Cloud Config Server
修改各個client的配置
application.yml移除屬性eureka.client.serviceUrl.defaultZone
bootstrap.yml添加屬性 spring.cloud.config.uri: http://localhost:8001
pom.xml添加依賴spring-cloud-config-client
依次啟動Config Server,Eureka Server,Eureka Client,在管理頁面上看到服務都起成功時,訪問127.0.0.1/8020/sentence 可以得到一個隨機組成的句子
-
如果你想把words信息也放入repository呢?在application.yml中添加,如下信息,各個client啟動的時候加上-Dspring.profiles.active對應到相應的啟動參數就行了.
--- 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構建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添加多個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
此時Eureka Server 同時也是個Eureka Client,需要設置eureka.client.serviceUrl.defaultZone,值是另外兩個,最終會是下面這樣
--- 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)為啟動參數分別啟動Eureka Server
修改所有Eureka Client的eureka.client.serviceUrl.defaultZone值為http://eureka-primary:8011/eu...逗號分隔,無空白),集群啟動成功登錄管理頁面查看,如下圖所示即成功
再啟動所有的Eureka Clients,查看http://localhost:8020/sentence 是否成功
為了測試容錯性,關掉兩個Eureka Client,重啟若干個Eureka Client,觀察啟動是否報錯,再去查看查看http://localhost:8020/sentence 是否成功
特別感謝 kennyk65
Spring Cloud 中文用戶組 31777218
Spring-Cloud-Config 官方文檔-中文譯本 (本人有參與,哈哈)
Spring Cloud Netflix 官網文檔-中文譯本
本文實例github地址 mmb-eureka
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64983.html
摘要:實戰五概要什么是怎么用常見配置介紹什么是是分布式系統處理超時和錯誤的機制如下圖所示分布式系統中某個用戶請求依賴服務當此請求并發超過的時候服務處理速度變慢但是服務還是被調用大量請求會阻塞在服務器上影響其它整個服務在復雜的分布式架構的應用程序 Spring Cloud實戰(五)-Spring Cloud Netflix Hystrix 概要 什么是Spring Cloud Netflix...
摘要:簡介用于監控基于的應用,它是在的基礎上提供簡潔的可視化。提供了很多功能,如顯示和,顯示在線狀態,的日志級別管理,線程管理,管理等。 Spring Cloud Admin 簡介 Spring Boot Admin 用于監控基于 Spring Boot 的應用,它是在 Spring Boot Actuator 的基礎上提供簡潔的可視化 WEB UI。Spring Boot Admin 提供...
摘要:服務器將要監聽的端口不要使用服務進行注冊不要在本地緩存注冊表信息使用一個新的注解,就可以讓我們的服務成為一個服務服務發現客戶端配置以為例需要做件事情成為服務發現的客戶端配置對應來說我們只需要配置如下啟動運行查看。 Spring簡介 為什么要使用微服務 單體應用: 目前為止絕大部分的web應用軟件采用單體應用,所有的應用的用戶UI、業務邏輯、數據庫訪問都打包在一個應用程序上。 showI...
閱讀 813·2021-11-18 10:02
閱讀 2503·2021-11-11 16:54
閱讀 2750·2021-09-02 09:45
閱讀 654·2019-08-30 12:52
閱讀 2774·2019-08-29 14:04
閱讀 2745·2019-08-29 12:39
閱讀 448·2019-08-29 12:27
閱讀 1887·2019-08-26 13:23