Spring Cloud Eureka(服務端)

Eureka簡介和作用

Spring Cloud EurekaSpring Cloud Netflix微服務套件中的一部分,它基于Netflix Eureka做了二次封裝。主要負責完成微服務架構中的服務治理功能。
服務治理是微服務架構中最為核心和基礎的模塊,它主要用來實現(xiàn)各個微服務實例的自動化注冊和發(fā)現(xiàn)。

Eureka服務端

Eureka服務端,即服務注冊中心。它同其他服務注冊中心一樣,支持高可用配置。依托于強一致性提供良好的服務實例可用性,可以應對多種不同的故障場景。
Eureka服務端支持集群模式部署,當集群中有分片發(fā)生故障的時候,Eureka會自動轉入自我保護模式。它允許在分片發(fā)生故障的時候繼續(xù)提供服務的發(fā)現(xiàn)和注冊,當故障分配恢復時,集群中的其他分片會把他們的狀態(tài)再次同步回來。集群中的的不同服務注冊中心通過異步模式互相復制各自的狀態(tài),這也意味著在給定的時間點每個實例關于所有服務的狀態(tài)可能存在不一致的現(xiàn)象。

服務注冊中心

在服務治理框架中,通常都會構建一個注冊中心,每個服務單元向注冊中心登記自己提供的服務,包括服務的主機與端口號、服務版本號、通訊協(xié)議等一些附加信息。注冊中心按照服務名分類組織服務清單,同時還需要以心跳檢測的方式去監(jiān)測清單中的服務是否可用,若不可用需要從服務清單中剔除,以達到排除故障服務的效果。

服務注冊管理器

原理如下圖

4758-20160115165843647-842531622.png

所有的服務端及訪問服務的客戶端都需要連接到注冊管理器(eureka服務器)。服務在啟動時會自動注冊自己到eureka服務器,每一個服務都有一個名字,這個名字會被注冊到eureka服務器。使用服務的一方只需要使用該名字加上方法名就可以調用到服務。

Spring cloud的服務注冊及發(fā)現(xiàn),不僅僅只有eureka,還支持ZookeeperConsul。默認情況下是eureka,spring 封裝了eureka,使其非常簡單易用,只需要比傳統(tǒng)應用增加一行代碼就可以使用了,這一行代碼就是一個注解。

使用Eureka進行服務治理

引入Spring Cloud Eureka Server依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

版本對應

引入依賴的時候需要注意SpringCloudSpringBoot的版本對應
SpringCloudSpringBoot版本分別是Finchley.RC22.0.2.RELEASE

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.RC2</spring-cloud.version>
</properties>

在之前的一篇文章有提到版本的對應,我這里SpringCloud Finchley版兼容SpringBoot 2.0,所以是沒問題的。

開啟EurekaServer服務

在Springboot項目中的main入口,添加@EnableEurekaServer注解,來開啟服務注冊中心

@SpringBootApplication
@EnableEurekaServer
public class SpringcloudEurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudEurekaApplication.class, args);
    }
}

還需要在配置文件中加入Eureka Server相關配置

server:
  port: 9090
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    eureka-server-u-r-l-context: http://${eureka.instance.hostname}:${server.port}/eureka/

server.port:服務注冊中心端口號
eureka.instance.hostname:服務注冊中心實例的主機名
eureka.client.register-with-eureka:是否向服務注冊中心注冊自己,默認為true。 由于當前應用就是Eureka Server, 因此設為 false;
eureka.client.fetch-registry:是否檢索服務, 默認為true。
如果這是一個單點的 Eureka Server,不需要同步其他節(jié)點的數(shù)據(jù),可以設為false
eureka.client.eureka-server-u-r-l-context:服務注冊中心的配置內容,指定服務注冊中心的位置
以上是比較常用的屬性,還有
eureka.server.enable-self-preservation:是否開啟自我保護模式,默認為true。關閉了面板會出現(xiàn)提示:THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.Eureka 會統(tǒng)計15分鐘之內心跳失敗的比例低于85%將會觸發(fā)保護機制,不剔除服務提供者,如果關閉服務注冊中心將不可用的實例正確剔除
eureka.instance.prefer-ip-address:是否使用IP地址的方式,默認是false。不使用主機名來定義注冊中心的地址,而使用IP地址的形式
eureka.instance.ip-address:IP地址,使用該屬性配置的IP,否則自動獲取除環(huán)路IP外的第一個IP地址,與eureka.instance.prefer-ip-address一起使用
eureka.instance.appname:服務名,一般取 spring.application.name 配置值,默認為unknown

服務續(xù)約

在注冊服務之后,服務提供者會維護一個心跳用來持續(xù)高速Eureka Server,“我還在持續(xù)提供服務”,否則Eureka Server的剔除任務會將該服務實例從服務列表中排除出去。
eureka.instance.lease-renewal-interval-in-seconds:定義服務續(xù)約任務(心跳)的調用間隔,單位:秒,默認30秒
eureka.instance.lease-expiration-duration-in-seconds:定義服務失效的時間,表示eureka客戶端發(fā)送心跳給服務端的頻率。單位:秒,默認90秒
該值太大,則很可能將流量轉發(fā)過去的時候,該instance已經(jīng)不存活了。
該值太小了,則instance則很可能因為臨時的網(wǎng)絡抖動而被摘除掉。
該值至少應該大于eureka.instance.lease-renewal-interval-in-seconds

啟動了Eureka Server,然后在瀏覽器中輸入Eureka Server的地址后,我這里的地址是http://localhost:9090/,直接回車,就進入了springcloud的服務治理頁面

服務注冊中心頁面

QQ截圖20180614155222.png

由于現(xiàn)在沒有注冊服務,所以Instances currently registered with Eureka是沒有服務名的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • Spring Cloud學習02-服務注冊與發(fā)現(xiàn) Spring Cloud簡介 Spring Cloud是一個基于...
    it_zzy閱讀 4,765評論 2 20
  • 概述 著名的CAP理論指出,一個分布式系統(tǒng)不可能同時滿足C(一致性)、A(可用性)和P(分區(qū)容錯性)。由于分區(qū)容錯...
    PKAQ閱讀 3,919評論 0 13
  • 有一天 突發(fā)奇想 打算 做個詩人 于是 翱翔在 浩瀚的星空 漫步在 遼闊的草原 穿行在 無邊的沙漠 游走在 荒蕪的...
    草堂秋客閱讀 492評論 11 3
  • 大海吞沒了白天, 夜幕掩蓋了這個場面。 人們陶醉于燈紅酒綠的浪漫, 早忘了大海上無邊無際的黑暗。 只剩下, 寂寞的...
    曹煥甫閱讀 573評論 0 2

友情鏈接更多精彩內容