<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
並在啓動類上添加@EnableEurekaServer註解,這樣就可以開啓服務註冊中心的功能了,在配置文件中添加以下內容就可以其中註冊中心這個服務了。server.port=8080
#由於該應用爲註冊中心,所以設置爲false, 代表不向註冊中心註冊自己
eureka.client.register-with-eureka=false
#由於註冊中心的職責就是維護服務實例,它並不需要去檢索服務, 所以也設置爲false
eureka.client.fetch-registry=false
#指定服務註冊中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
通過localhost:8080就可以查看註冊中心的頁面數據情況,如下圖所示Eureka在設計思想中,所有的節點既是服務提供方也是服務消費方,服務的註冊中心也是如此,這樣就可以解決註冊中心的高可用問題,實現高可用的思想是:單機的Eureka註冊中心向其他的註冊中心註冊自己,這樣就可以形成互相註冊的註冊中心,實現高可用,windows條件下將單機的項目複製3份,每一份的配置文件內容如下:
#server1
spring.application.name=eureka-server
server.port=8095
eureka.instance.hostname=127.0.0.1:8095
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8096/eureka/,http://127.0.0.1:8097/eureka/
#server2
spring.application.name=eureka-server
server.port=8096
eureka.instance.hostname=127.0.0.1:8096
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8095/eureka/,http://127.0.0.1:8097/eureka/
#server3
spring.application.name=eureka-server
server.port=8097
eureka.instance.hostname=127.0.0.1:8097
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8095/eureka/,http://127.0.0.1:8096/eureka/
只是將原來單機的配置文件內容修改爲現在的以上這三種形式,就可以運行項目了,運行結果如下,eureka.instance.hostname可以是peer1、peer2、peer3這樣的名字,但是這樣就得修改hosts配置文件,對IP做映射,看來Eureka內部是根據eureka.instance.hostname獲取相應的IP,然後根據IP去做的註冊服務中心的集羣註冊完成之後,就可以在上邊註冊和發現服務了,首先看一下服務的註冊,在服務的註冊端添加以下jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
修改配置文件爲以下內容spring.application.name=compute-service
server.port=8081
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8095/eureka/,http://127.0.0.1:8096/eureka/,http://127.0.0.1:8097/eureka/
然後在主類上添加@EnableDiscoveryClient註解,開啓服務的註冊發現功能,這樣這個服務的所有對外提供的功能都被註冊到服務註冊中心。下圖是兩個server註冊後的服務在頁面上的展示:
然後看一下服務的發現,消費端使用的是Robbin,所以要額外添加以下兩個jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在主類上添加@EnableDiscoveryClient註解,開啓服務發現的功能,同時,由於服務消費端去請求數據的時候,需要Http請求,這裏需要生成一個http請求的對象,在主類中添加以下代碼,這裏有一個客戶端負載的功能,後續的文章問研究這個的原因,這裏不做說明 @Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
修改配置文件爲以下內容spring.application.name=ribbon-consumer
server.port=8082
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8095/eureka/,http://127.0.0.1:8096/eureka/,http://127.0.0.1:8097/eureka/
啓動項目後就可以通過以下方式調用服務了 public String add() {
return restTemplate.getForEntity("http://compute-service/add?a=10&b=20", String.class).getBody();
}
compute-service爲服務提供者註冊的服務的名字,至此搭建高可用的服務註冊中心和驗證過程就完畢了。
………………………………………………………………………………………………………………………………………………………………………………………
更新:
#關閉自我保護,可以定期清理失效的服務
eureka.server.enable-self-preservation=false
# 清理間隔(單位毫秒,默認是60*1000):
eureka.server.eviction-interval-timer-in-ms=1000