1. 程式人生 > >Eureka伺服器,簡單例子

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