Eureka簡介
1、Eureka原理
Application server:相當于項目中的服務提供者;
Application Client:相當于本書的服務消費者;
Make Remote Call:可以了解成調用RESTful API的行為;
us-east-lc、us-east-ld等都是zone,它們都屬于us-east-l這個region;
2、Eureka的兩個元件 Eureka server 和 Eureka Client
Eureka server:提供服務發現的能力,各個微服務啟動時,會向Eureka server注冊自己的資訊(例如:IP、端口、微服務名稱等),Eureka server會存儲這些資訊;
Eureka Client:是一個Java用戶端,用于簡化與Eureka server的互動;
微服務啟動後,會周期性(預設30s)地向Eureka server發送心跳以續約自己的“租期”;
如果Eureka Server在一定時間内沒有接收到某個微服務執行個體的心跳,Eureka Server将登出該執行個體(預設90 s);
預設情況下,Eureka Server同時也是Eureka Client。多個Eureka Server執行個體互相直接通過複制的方式來實作服務注冊清單中資料的同步;
Eureka Client會緩存服務系統資料庫中的資訊,這種方式有一定的優勢——首先,微服務無需每次請求都查詢Eureka Server,進而降低了Eureka Server的壓力;其次,即使Eureka Server所有節點都宕掉,服務消費者依然可以使用緩存中的資訊找到服務提供者并完成調用。
注釋:Eureka通過心跳檢查、用戶端緩存等機制,提高了系統的靈活性、可伸縮性和可用性;
3、建立Eureka Server
(1)依賴的jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
(2)啟動類的編寫
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}
注解:
@EnableEurekaServer表示聲明一個Eureka Service
(3)application.xml檔案的配置
server:
port: 6868
eureka:
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://127.0.0.1:${server.port}/eureka/
注解
server.port:表示目前服務的端口号
eureka.client.registerWithEureka:表示是否将自己注冊到Eureka Server,預設為true。由于目前應用就是Eureka Server,故而設為false;
eureka.client.fetchRegistry:表示是否從Eureka Server擷取注冊資訊,預設為true。因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節點的資料,故而設為false;
eureka.client.serviceUrl.defaultZone:設定與Eureka Server互動的位址,查詢服務和注冊服務需要依賴這個位址。預設是http://127.0.0.1:${server.port}/eureka/ 多個位址之間可以使用,分隔。
(4)測試
啟動Eureka Server 通路http://127.0.0.1:6868/
3、将微服務注冊到Eureka Server上
(1)依賴jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
(2)application.yml配置檔案
pring:
application:
name: yczj-manager
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:6868/eureka/
instance:
prefer-ip-address: true
注釋:
pring.application.name:用于指定注冊到Eureka Server上的應用名稱;
eureka.instance.prefer-ip-address:表示将自己的IP注冊到Eureka Server。如不配置該屬性獲将其設定為false,則表示注冊微服務所在作業系統的hostname到Eureka Server;
(3)啟動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProvideUserApplication {
public static void main(String[] args) {
SpringApplication.run(ProvideUserApplication.class, args);
}
}
注釋:
這樣既可将使用者微服務注冊到Eureka Server上。同理,将其他微服務也注冊到Erueka Server上,配置以上資訊
注意事項:
1、在Spring Cloud Edgware之前,要想将微服務注冊到Eureka Server或其他服務發現元件上,必須在啟動類上添加@EnableDiscoveryClient或者@EnableEurekaClient
2、在Spring CloudEdgware以及更高版本中,隻需要添加相關依賴,即可自動注冊。這是由于在實際項目中,我們可能希望實作“不同環境不同配置”的效果,例如:在開發環境中,不注冊到Eureka Server上,而是服務提供者、服務消費者直連,便于調測;在生産環境中,我們有希望能夠享受服務發現的優勢---服務消費者無須知道服務提供者的絕對位址。
3、如不想将服務注冊到Eureka Server,隻需設定
spring.cloud.service-reg-istry.auto-registration.enabled=false
或者@EnableDiscoveryClient(auto-Register=false)即可