您好,登錄后才能下訂單哦!
本篇文章為大家展示了SpringCloud中怎么搭建Eureka服務注冊中心,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Eureka和Consul、Zookeeper等類似,是一個用戶服務發現和服務注冊的組件,最開始主要用于亞馬遜旗下的云計算服務平臺AWS。Eureka分為EurekaServer(服務注冊中心)和EurekaClient(客戶端)。
1:完全開源,且經過三年時間迭代,性能和功能都非常穩定。
2:是SpringCloud官方推薦的注冊中心,能夠和SpringCloud其他組件完美對接。
3:Eureka能夠和Ribbon、Hystrix、Zuul等其他組件相互配合,快速完成服務注冊中心,和這些組件并稱Netfilx OOS組件,由SpringCloud整合,是SpringCloud的核心服務組件,也是基礎組件。
Talking is boolshit, just look at the code!
父項目pom.xml
<groupId>com.calvin.cloud</groupId> <artifactId>cloud_day01</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>eureka-server</module> <module>eureka-client</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
使用SpringInitializr創建兩個子Module,分別是eureka-server和eureka-client
eureka-server/pom.xml
<parent> <artifactId>cloud_day01</artifactId> <groupId>com.calvin.cloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka-server</artifactId> <dependencies> <!-- springcloud的版本如果有問題,這個包引入就會有問題 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
eureka-server/EurekaServerApplication.java
/** * EurekaServer啟動類 * @author Calvin * @date 2019/07/29 */ @SpringBootApplication @EnableEurekaServer public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class); } }
eureka-server/application.yml
server: port: 8080 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
啟動EurekaServerApplication.main(),瀏覽器訪問 http://localhost:8080/eureka 此時顯示并沒有可用服務注冊進來
No instances available
eureka-client/pom.xml
<parent> <artifactId>cloud_day01</artifactId> <groupId>com.calvin.cloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka-client</artifactId> <dependencies> <!-- springcloud的版本如果有問題,這個包引入就會有問題 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
eureka-client/application.yml
server: port: 8081 spring: application: name: my_eureka_client eureka: client: service-url: defaultZone: http://localhost:8080/eureka/
eureka-client/ClientApplication.java
/** * Client測試啟動類 * @author Calvin * @date 2019/09/29 */ @SpringBootApplication @EnableEurekaClient public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class); } }
刷新http://localhost:8080/eureka 發現服務已經注冊成功了
1:Register———服務注冊
服務注冊即是EurekaClient祥EurekaServer提交注冊自己的服務信息,包括IP地址、端口,ServiceID等信息。如果EurekaClient中沒有ServiceId,則默認以配置文件中的#{spring.application.name}為服務名。
2:Renew———服務續約
EurekaClient默認每隔30s發送一次心跳來進行服務續約。通過服務續約來告知EurekaServer該EurekaClient依然可用,沒有出現故障。如果EurekaServer在90s之內沒有收到心跳,則EurekaServer會認為該服務已經掛掉,則會將該EurekaClient實力從注冊列表中剔除掉。
3:FetchRegistries———獲取服務注冊列表信息
EurekaClient從EurekaServer中獲取服務注冊表信息,并將其緩存在本地。EurekaClient會使用服務注冊列表中的信息查找其他服務的信息,從而進行遠程調用。
該注冊列表信息會定時30s從服務端更新一次,每次返回的注冊列表信息可能與EurekaClient緩存的信息不匹配,EurekaClient會自己處理這些信息。如果由于某種原因導致注冊列表信息不能及時匹配,則EurekaClient會重新更新這些信息。
EurekaServer緩存了所有的服務注冊列表信息,并將整個服務列表以及每隔應用程序進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。EurekaClient和EurekaServer可以是用JSON和XML數據格式相互通信。在默認的情況下,EurekaClient使用JSON格式的方式獲取服務注冊列表信息。
4:Cancel———服務下線
EurekaClient在程序關閉時可以向EurekaServer發送下線請求,發送請求后,該客戶端的實例信息將從EurekaServer的服務信息列表中刪除。該下線請求不會自動完成,需要在程序關閉時調用以下代碼 DiscoverManager.getInstance().shutdownComponent();
5:Evication———服務剔除
在默認情況下,當EurekaClient連續90s沒有像EurekaServer發送心跳,EurekaServer則會認為該服務已經不可用,將該服務實例從服務列表信息中刪除。
上面的架構描述了Eureka在Netflix上的部署方式,也是正常Eureka正常的部署和運行方式。每個區域都有一個Eureka集群,且每個區域至少有一個Eureka服務器來處理區域故障。
服務在EurekaServer注冊,然后發送心跳以每30秒更新其租約。如果客戶端無法保持心跳,EurekaServer將在90秒后從出服務器注冊列表中剔除此服務實例。注冊信息和續約信息將復制到集群中的所有EurekaServer節點。來自任何區域EurekaClient都可以每隔30s獲取到所有注冊列表信息,并進行遠程調用。 以上資料來自于官網:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
簡單介紹Eureka以及優缺點
編寫第一個Eureka注冊中心
了解Eureka中的概念和高可用注冊中心的架構
內容相對簡單,沒有對概念進行深入剖析
代碼中沒有進行集群搭建,也沒有測試服務提供者和消費者
后續應該加上源碼解析
上述內容就是SpringCloud中怎么搭建Eureka服務注冊中心,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。