springcloud之Eureka基礎
阿新 • • 發佈:2018-11-07
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)即可