Eureka伺服器,簡單例子
伺服器概念:
Eureka支援叢集部署,實現高可用。
Eureka沒有提供後臺的儲存,所有註冊的服務都被儲存在記憶體中的註冊中心。他們通過心跳儲存著最新的狀態。
客戶端存在相同的機制,同樣在記憶體中儲存了登錄檔資訊,這樣的機制提升了 eureka的效能。使得每次請求不必經過伺服器端的註冊中心。
伺服器中存在兩大物件:
1.服務提供者。
2.服務消費者(服務呼叫者)。
服務提供者: 主要功能:1.向伺服器註冊服務。2.傳送心跳給伺服器。3.向伺服器獲取登錄檔資訊。
當伺服器註冊到伺服器時,會提供一些自己的資訊給伺服器。例如:主機,埠等
伺服器呼叫者: 主要是用來呼叫和發現服務,同時自身也可能作為服務被其他人呼叫。
實際應用:
@EnableEurekaServer 標記該伺服器是Eureka服務
配置檔案application.yml
#配置伺服器埠
server:
port: 8864
#宣告是否將自己作為服務註冊到eureka,預設為true
eureka:
client:
registerWithEureka: false
fetchRegistry: false
#編寫服務提供者
1.建立一個web 專案,新增jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-eureka-client</artifactId> <version>1.3.1.RELEASE</version> </dependency>
啟動類加@EnableEurekaClient 標記此專案為服務提供者
建立@RestController
#編寫服務呼叫者
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
編寫yml
spring: application: name: web-api server: port: 9001 eureka: client: serviceUrl: defaultZone: http://localhost:8864/eureka/
啟動類 @EnableEurekaClient 表明是服務呼叫者,也作為提供者
此處的呼叫者同樣是釋出到eureka的客戶端,簡單來說就是eureka內部呼叫。呼叫過程中可能會部署多個例項,會涉及到負載均衡,伺服器查詢等問題,Netflix的專案已經幫我們解決,spring Could 已經封裝,只需要簡單的配置,編寫少量程式碼即可實現。
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String getStudentInfo() {
RestTemplate restTemplate = getRestTemplate();
String forObject = restTemplate.getForObject("http://localhost:9000/student/info", String.class);
System.out.println(forObject);
return forObject;
}
RestTemplate 是spring-web下面的類,專門用來呼叫rest服務。RestTemplate本身不具備呼叫分散式服務的能力,但是被@LoadBalanced註解修飾後,就可以呼叫了。
下面在呼叫者服務上加@EnableDiscoveryClient,此註解的使得服務呼叫類有能力去發現服務,@EnableEurekaClient中其實已經包含了@EnableDiscoveryClient