Spring Cloud 服務註冊與發現(Eureka)

服務發現是微服務架構下最核心的概念。Eureka是服務發現的服務端和客戶端,服務端是服務的註冊中心,客戶端是每一個服務。 服務端可以部署成為高可用,每一個節點都可以將其註冊的服務備份到其他節點。

一、Eureka Server

Eureka Server是服務的註冊中心,這是分佈式服務的基礎,我們看看這一部分如何搭建。

首先,Spring Cloud是基於Spring Boot的,所以我們的項目都是Spring Boot項目。需要引入最基礎的Spring Boot的jar包,如下:

Spring Cloud 服務註冊與發現(Eureka)

然後,再引入Eureka Server的jar包:

Spring Cloud 服務註冊與發現(Eureka)

接下來我們編寫啟動類:

Spring Cloud 服務註冊與發現(Eureka)

其中@EnableEurekaServer標誌著這個服務是一個Eureka Server。

下面就是最重要的application.yml的配置,我們先從最簡單的單例模式說起。

單例模式

這種模式下,Eureka Server是一個單點,如果發生故障,則整個註冊中心不可用,只適用於測試環境,具體配置如下:

Spring Cloud 服務註冊與發現(Eureka)

在單例模式下,我們關掉客戶端的行為。其中fetch-registry是抓取註冊的服務,register-with-eureka是將自己本身向其他的Eureka Server 註冊。 這兩項在集群配置時是必須打開的,這樣才能使註冊的服務同步到其他節點上。

在單例模式下,eureka.instance.hostname必須是localhost,而且defaultZone不能使用ip,要使用eureka.instance.hostname且走域名解析才可以。 這裡我們配置的是localhost,不需要修改hosts文件。這塊不知道為什麼Spring Cloud要這麼設計,小編在搭建集群時折騰了好長時間。 我們啟動服務,訪問http://localhost:8761,可以看到Eureka的管理頁面。

集群模式

我們可以通過創建多個Eureka Server實例,並讓他們相互註冊來實現集群。相互註冊就是我們前面提到的fetch-registry和register-with-eureka, 它們默認都是true,所以不需要配置,我們需要制定其他節點的url就可以了,我們以3個節點為例:

Spring Cloud 服務註冊與發現(Eureka)

Spring Cloud 服務註冊與發現(Eureka)

我們在一臺機器上起3個實例,peer1、peer2、peer3,端口分別為:9100、9200、9300。 這裡我們還是要注意一下instance.hostname和service-url

  • 3個實例的instance.hostname不能重複,否則集群搭建失敗
  • service-url不能使用ip+端口直接訪問,否則也會失敗

在單機情況下,我們需要配置hosts來解析peer1、peer2、peer3

Spring Cloud 服務註冊與發現(Eureka)

集群搭建成功:

Spring Cloud 服務註冊與發現(Eureka)

DS Replicas顯示兩個副本節點,available-replicas顯示兩個可用的副本節點。

如果在真實的物理機上,我們可以不通過配置hosts的方式也是可以的,記住這是 真實的物理機的情況下, 每臺機器的ip都不一樣。配置如下:

Spring Cloud 服務註冊與發現(Eureka)

Spring Cloud 服務註冊與發現(Eureka)

實例的名稱可以使用ip去註冊,當然每個ip不一樣,也不會重複,不會導致失敗。

至此,我們的Eureka Server就搭建完了,具體參照GitHub地址:https://github.com/liubo-tech/spring-cloud-eureka


分享到:


相關文章: