前言
在分佈式架構系統中,服務的註冊與發現是需要解決的問題之一,
其實在服務的註冊與發現是兩個過程,eureka客戶端註冊到eureka服務端,eureka服務端能夠發現新增的或是發生故障的eureka客戶端。
實現這種過程採用的是一種心跳機制。
而在spring cloud netflix系列技術棧中我們通過eureka來解決服務註冊與發現的問題。
使用eureka時,我們會接觸到eureka服務端(eureka註冊中心),eureka客戶端這樣的名詞。
我們通過下面eureka服務端和eureka客戶端的創建過程來體會一下它們之間的不同
創建eureka服務端(eureka註冊中心)
- pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- Application啓動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class,args);
}
}
- application.yml
# 配置應用程序的名稱,讓被人發現(eureka是通過服務名稱來完成服務的註冊與發現的)
spring:
application:
name: spring-cloud-netflix-eureka
server:
port: 8761
eureka:
instance:
# eureka服務端服務器地址(IP)
hostname: localhost
client:
# registerWithEureka,fetchRegistry的值爲false表明這是eureka服務端,而非eureka客戶端
registerWithEureka: false
fetchRegistry: false
serviceUrl:
# 設置eureka服務端的地址(IP:PORT)
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
創建eureka客戶端
- pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- Application啓動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class,args);
}
}
- application.yml
spring:
application:
# 服務名稱,eureka通過服務名稱完成服務的註冊與發現
name: spring-cloud-netflix-eureka-client
server:
port: 8762
eureka:
client:
serviceUrl:
# 指向Eureka服務端的地址
defaultZone: http://localhost:8761/eureka/
總結
我們通過比較eureka服務端與eureka客戶端的創建過程,會發現它們使用相同的依賴,在application啓動類中使用相同的註解@EnableEurekaServer來開啓服務,只是在application.yml中通過 registerWithEureka: false
fetchRegistry: false
這兩個屬性來區分誰是服務端,誰是客戶端。
eureka是通過心跳機制來維持服務的註冊與發現的。