1. 程式人生 > >Spring Cloud的註冊中心Eureka

Spring Cloud的註冊中心Eureka

大家如果覺得我寫的好,可以關注這個專案,之後我的學習過程中都會把學習筆記放入這個專案中。
https://github.com/IndustriousSnail/learning-notes

Spring Cloud的註冊中心Eureka

目錄

一、Eureka基本概念

Eureka是用於服務註冊與發現的。

1. 服務:一個專案會包含很多服務。比如,訂單服務,商品服務,使用者服務。 而這些服務是相互獨立,但是又相互依賴,不同的服務之間需要相互呼叫。 由於各個服務之間是部署在不同的叢集上,IP地址動態變化, 服務之間為了知道各個服務都是分佈在哪些機器上的,所以需要將自己的服務註冊在Eureka伺服器上。 以便於其他服務的呼叫。 2. 服務註冊:將服務註冊在Eureka伺服器上。Eureka伺服器也可以建立叢集,只需要兩兩註冊即可。 服務發現 3. 服務發現:到Eureka伺服器上尋找自己所要訪問的服務在哪臺伺服器上。

由兩個元件構成:

1. Eureka Server 註冊中心

用於服務註冊的伺服器

  1. 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伺服器頁面檢視