Spring Cloud的註冊中心Eureka
阿新 • • 發佈:2018-11-10
大家如果覺得我寫的好,可以關注這個專案,之後我的學習過程中都會把學習筆記放入這個專案中。
https://github.com/IndustriousSnail/learning-notes
Spring Cloud的註冊中心Eureka
目錄
一、Eureka基本概念
Eureka是用於服務註冊與發現的。
1. 服務:一個專案會包含很多服務。比如,訂單服務,商品服務,使用者服務。 而這些服務是相互獨立,但是又相互依賴,不同的服務之間需要相互呼叫。 由於各個服務之間是部署在不同的叢集上,IP地址動態變化, 服務之間為了知道各個服務都是分佈在哪些機器上的,所以需要將自己的服務註冊在Eureka伺服器上。 以便於其他服務的呼叫。 2. 服務註冊:將服務註冊在Eureka伺服器上。Eureka伺服器也可以建立叢集,只需要兩兩註冊即可。 服務發現 3. 服務發現:到Eureka伺服器上尋找自己所要訪問的服務在哪臺伺服器上。由兩個元件構成:
用於服務註冊的伺服器
-
Eureka Client 服務註冊
每一個微服務都是一個Client,服務需要將自己註冊到Eureka Server上去
二、Eureka Server註冊中心
2.1 Erueka Server在Spring Boot中的使用
1.在Application上增添@EnableEurekaServer註解
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
2.啟動專案
啟動專案,登入localhost:8080就可以看到Eureka的管理介面了。介面上的“Instances currently registered with Eureka”就是註冊在這個伺服器上的服務。 目前沒有客戶端註冊到eureka上來。同時,啟動的時候會報錯,並且會不停報錯。
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:111) ~[eureka-client-1.7.2.jar:1.7.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.7.2.jar:1.7.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.7.2.jar:1.7.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.7.2.jar:1.7.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.7.2.jar:1.7.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:807) ~[eureka-client-1.7.2.jar:1.7.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:109) ~[eureka-client-1.7.2.jar:1.7.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_181] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_181] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_181] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_181] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
這是因為Eureka Server本身也是一個Client,它需要註冊到另一個伺服器上,但是因為找不到註冊的伺服器,所以會不停報錯。
為了解決報錯問題,我們需要進行配置,將自己註冊到自己上。
需要在application.yml上進行如下配置
eureka:
client:
service-url:
# client將服務註冊在該地址上
defaultZone: http://localhost:8761/eureka/
# 增加該配置,則不會將eureka註冊在自己的機器上
register-with-eureka: false
spring:
application:
# 為應用程式命名,該名字會反應在eureka平臺上
name: eureka_server
增添如下配置,雖然啟動時還會報錯,但是可以忽略啟動時的報錯。但是之後的心跳不會出現報錯現象。
如果將register-with-eureka配置置為true,則平臺上會看到自己,如果為false則不會。
三、Spring Boot中使用Eureka Client
1.構建SpringBoot專案,並且選中“Cloud Discovery->Eureka Discovery” 或者在原來的專案中增加依賴<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
2.在application.yml中增加配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
3.在Application啟動類上增添註解@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient //有些版本不加這個註解,也是可以註冊成功的
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}
4.啟動後,可以到Eureka伺服器頁面檢視