注冊中心(Eureka)


Eureka是Spring Cloud的注冊中心,類似於Dubbo中的zookeeper,那么什么是注冊中心呢?在了解注冊中心之前我們先看一下單體應用。

傳統的單體應用:

     在單體應用中,所有的業務都集中在一個服務器中,當瀏覽器發起請求時,通過前端請求調用后端接口,后端接口調用相應的業務並在前端進行響應,整個的調用就是從請求到響應的一條龍服務。所以不存在服務之間的中轉,也就不存在注冊中心。

    但是隨着項目越做越大,傳統的單體項目已經無法滿足我們的需求(用戶數量增加,業務功能增多,服務器壓力變大。。。),所以我們需要用微服務思想,對項目進行拆分,拆分后的每個模塊都會再一個服務器上獨立的運行,雖然解決了一些單體項目所帶來的的諸多瓶頸,但是又有一個新的問題產生,就是模塊與模塊之間的調用,一個模塊的使用可能需要依賴很多模塊,例如A調用B,那么就要在A中寫上B的地址,也就意味着B的部署位置要穩定,不能變,如果B要進行集群化部署,那么A就需要修改,所以耦合度是非常高的。接下來就要引入注冊中心,它的存在完美的解決了這種高耦合的詬病。

Eureka簡介:

       Eureka是由Netflix公司提供的,它是基於REST實現注冊和發現的。曾經Eureka是Spring Cloud中非常重要的組件之一,但是官方對它已經對外停更了,至今有一年半時間了,但是目前並不影響我們使用它。

       Eureka由兩部分組成,服務端和客戶端,服務端是注冊中心,用來接收其他服務的注冊,客戶端是java客戶端,用開注冊,並實現負載均衡,其中客戶端根據業務又划分兩部分,服務提供者,和服務消費者。

Eureka的使用:

     Eureka是由java開發的,因為Spring Boot對Eureka進行了封裝,所以使用Spring Cloud 搭建Eureka是非常方便的,只需要引入依賴就可以了。

說一千道一萬,還不如實戰來的實在,接下來就看一下它的搭建步驟:

1.創建一個boot項目,並加入如下的依賴;

 

 

 2.項目創建成功后,需要在啟動類上加上一個注解(@EnableEurekaServer),標記它是一EurekaServer:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
//開啟EurekaServer的功能
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }

}

3.在application.propeties加入配置:

#給服務取名
spring.application.name=eureka
#服務端口號
server.port=1111
#默認情況下,eureka server也是一個普通的微服務,所以當它還是一個注冊中心的時候,會有兩個身份:
#注冊中心和普通服務
#eureka.client.register-with-eureka設置為false,表示當前項目不要注冊到注冊中心去
eureka.client.register-with-eureka=false
#表示是否從eureka Server 上獲取注冊信息
eureka.client.fetch-registry=false

4.配置完成后就可以啟動項目了。

      瀏覽器輸入localhost:1111,當看見這個頁面,就證明已經配置成功了:

 

 簡單介紹下這個界面:

System Status,系統狀態,例如啟動時間等

DS Replicas :集群環境下的副本,也就是當前服務從哪里同步數據。

Instances currently registered with Eureka:當前注冊上來的服務

General Info:系統的運行環境,如CPU等

下面還有一條信息,上面圖片沒有顯示:

Instance Info:當前服務的基本信息,如IP地址,狀態等等。

介紹的這個界面中有一個集群,那么它是做什么的?為什么要有它?

      簡單來說,集群的產生就是為了分散服務壓力,因為我們是用了注冊中心之后,所有的服務都要經過服務注冊中心來進行信息交換,所以一旦注冊中心出了問題,那么會影響到整個系統的穩定性。所以,在實際開發中,Eureka都是以集群的形式存在。

       Eureka集群,實際上就是啟動多個Eureka實例,多個實例之間相互注冊,相互同步數據,共同組成一個 Eureka集群。

接下來我們看一下集群是如何 搭建的:

1.修改電腦的hosts文件,文件路徑是C:\Windows\System32\drivers\etc\hosts,在這個配置文件的末尾加上127.0.0.1 eureka-a eureka-b

2.在上邊搭建的Eureka上添加兩個配置文件,分別是application-a .properties,application-b.properties

先看application-a .properties的配置

#給服務取名
spring.application.name=eureka
#服務端口號
server.port=1111
#起一個別名
eureka.instance.hostname=eurekaA
#默認情況下,eureka server也是一個普通的微服務,所以當它還是一個注冊中心的時候,會有兩個身份:
#注冊中心和普通服務
#eureka.client.register-with-eureka設置為true,表示當前項目要注冊到注冊中心去
eureka.client.register-with-eureka=true
#表示是否從eureka Server 上獲取注冊信息
eureka.client.fetch-registry=true
#將eurekaA注冊到eurekaB上
eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka

再看application-b.properties的配置:

#給服務取名
spring.application.name=eureka
#服務端口號
server.port=1112
#起一個別名
eureka.instance.hostname=eurekaB
#默認情況下,eureka server也是一個普通的微服務,所以當它還是一個注冊中心的時候,會有兩個身份:
#注冊中心和普通服務
#eureka.client.register-with-eureka設置true,表示當前項目要注冊到注冊中心去
eureka.client.register-with-eureka=true
#表示是否從eureka Server 上獲取注冊信息
eureka.client.fetch-registry=true
#將eurekaB注冊到eurekaA上
eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka

3.配置完成后對項目打成jar包,雙擊package

 4,在命令行啟動兩個Eureka實例。

在Terminal中切換到剛打包后的目錄下,執行下面的命令,一條執行完成后,重新打開一個Termina窗口,繼續執行下一條命令

java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a

java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b

5.命令執行完成后,瀏覽器訪問兩個Eureka實例

 

 

 至此我們就可以看到兩個人服務之間相互注冊,互相同步對方的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM