Eureka

1 Eureka注冊(cè)中心

1.1 需求分析

在前后端分離架構(gòu)中,服務(wù)層被拆分成了很多的微服務(wù),微服務(wù)的信息如何管理?Spring Cloud中提供服務(wù)注冊(cè)中心來管理微服務(wù)信息。

為什么 要用注冊(cè)中心?

1、微服務(wù)數(shù)量眾多,要進(jìn)行遠(yuǎn)程調(diào)用就需要知道服務(wù)端的ip地址和端口,注冊(cè)中心幫助我們管理這些服務(wù)的ip和端口。

2、微服務(wù)會(huì)實(shí)時(shí)上報(bào)自己的狀態(tài),注冊(cè)中心統(tǒng)一管理這些微服務(wù)的狀態(tài),將存在問題的服務(wù)踢出服務(wù)列表,客戶端獲取到可用的服務(wù)進(jìn)行調(diào)用。

1.3 Eureka注冊(cè)中心

1.3.1 Eureka介紹

Spring Cloud Eureka 是對(duì)Netflix公司的Eureka的二次封裝,它實(shí)現(xiàn)了服務(wù)治理的功能,Spring Cloud Eureka提
供服務(wù)端與客戶端,服務(wù)端即是Eureka服務(wù)注冊(cè)中心,客戶端完成微服務(wù)向Eureka服務(wù)的注冊(cè)與發(fā)現(xiàn)。服務(wù)端和客戶端均采用Java語言編寫。下圖顯示了Eureka Server與Eureka Client的關(guān)系:


image.png

1、Eureka Server是服務(wù)端,負(fù)責(zé)管理各各微服務(wù)結(jié)點(diǎn)的信息和狀態(tài)。
2、在微服務(wù)上部署Eureka Client程序,遠(yuǎn)程訪問Eureka Server將自己注冊(cè)在Eureka Server。
3、微服務(wù)需要調(diào)用另一個(gè)微服務(wù)時(shí)從Eureka Server中獲取服務(wù)調(diào)用地址,進(jìn)行遠(yuǎn)程調(diào)用。

1.3.2 Eureka Server搭建

1、創(chuàng)建xc-govern-center工程:

包結(jié)構(gòu):com.xuecheng.govern.center
2、添加依賴
在父工程添加:

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

在Eureka Server工程添加:

    <dependencies>
        <!-- 導(dǎo)入Eureka服務(wù)的依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

3、啟動(dòng)類

@EnableEurekaServer//標(biāo)識(shí)這是一個(gè)Eureka服務(wù)
@SpringBootApplication
public class GovernCenterApplication {
    public static void main(String[] args) {
        SpringApplication.run(GovernCenterApplication.class, args);
    }
}

4、@EnableEurekaServer
需要在啟動(dòng)類上用@EnableEurekaServer標(biāo)識(shí)此服務(wù)為Eureka服務(wù)

5、application.yml的配置內(nèi)容如下:

server:
  port: 50101 #服務(wù)端口

spring:
  application:
    name: xc‐govern‐center #指定服務(wù)名
eureka:
  client:
    registerWithEureka: false #服務(wù)注冊(cè),是否將自己注冊(cè)到Eureka服務(wù)中
    fetchRegistry: false #服務(wù)發(fā)現(xiàn),是否從Eureka中獲取注冊(cè)信息
    serviceUrl: #Eureka客戶端與Eureka服務(wù)端的交互地址,高可用狀態(tài)配置對(duì)方的地址,單機(jī)狀態(tài)配置自己(如果不配置則默認(rèn)本機(jī)8761端口)
      defaultZone: http://localhost:50101/eureka/
  server:
    enable‐self‐preservation: false #是否開啟自我保護(hù)模式
    eviction‐interval‐timer‐in‐ms: 60000 #服務(wù)注冊(cè)表清理間隔(單位毫秒,默認(rèn)是60*1000)

registerWithEureka:被其它服務(wù)調(diào)用時(shí)需向Eureka注冊(cè)
fetchRegistry:需要從Eureka中查找要調(diào)用的目標(biāo)服務(wù)時(shí)需要設(shè)置為true
serviceUrl.defaultZone 配置上報(bào)Eureka服務(wù)地址高可用狀態(tài)配置對(duì)方的地址,單機(jī)狀態(tài)配置自己
enable-self-preservation:自保護(hù)設(shè)置,下邊有介紹。
eviction-interval-timer-in-ms:清理失效結(jié)點(diǎn)的間隔,在這個(gè)時(shí)間段內(nèi)如果沒有收到該結(jié)點(diǎn)的上報(bào)則將結(jié)點(diǎn)從服務(wù)列表中剔除。

5、啟動(dòng)Eureka Server
啟動(dòng)Eureka Server,瀏覽50101端口。


image.png

上圖紅色提示信息:
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OFNETWORK/OTHER PROBLEMS.
自我保護(hù)模式被關(guān)閉。在網(wǎng)絡(luò)或其他問題的情況下可能不會(huì)保護(hù)實(shí)例失效。

Eureka Server有一種自我保護(hù)模式,當(dāng)微服務(wù)不再向Eureka Server上報(bào)狀態(tài),Eureka Server會(huì)從服務(wù)列表將此服務(wù)刪除,如果出現(xiàn)網(wǎng)絡(luò)異常情況(微服務(wù)正常),此時(shí)Eureka server進(jìn)入自保護(hù)模式,不再將微服務(wù)從服務(wù)列表刪除。
在開發(fā)階段建議關(guān)閉自保護(hù)模式

1.3.2.2 高可用環(huán)境搭建

Eureka Server 高可用環(huán)境需要部署兩個(gè)Eureka server,它們互相向?qū)Ψ阶?cè)。如果在本機(jī)啟動(dòng)兩個(gè)Eureka需要注意兩個(gè)Eureka Server的端口要設(shè)置不一樣,這里我們部署一個(gè)Eureka Server工程,將端口可配置,制作兩個(gè)Eureka Server啟動(dòng)腳本,啟動(dòng)不同的端口,如下圖:


image.png

1、在實(shí)際使用時(shí)Eureka Server至少部署兩臺(tái)服務(wù)器,實(shí)現(xiàn)高可用。
2、兩臺(tái)Eureka Server互相注冊(cè)。
3、微服務(wù)需要連接兩臺(tái)Eureka Server注冊(cè),當(dāng)其中一臺(tái)Eureka死掉也不會(huì)影響服務(wù)的注冊(cè)與發(fā)現(xiàn)。
4、微服務(wù)會(huì)定時(shí)向Eureka server發(fā)送心跳,報(bào)告自己的狀態(tài)。
5、微服務(wù)從注冊(cè)中心獲取服務(wù)地址以RESTful方式發(fā)起遠(yuǎn)程調(diào)用
配置如下:
1、端口可配置

server:
  port: ${PORT:50101} #服務(wù)端口

2、Eureka服務(wù)端的交互地址可配置

eureka:
  client:
    registerWithEureka: true #服務(wù)注冊(cè),是否將自己注冊(cè)到Eureka服務(wù)中
    fetchRegistry: true #服務(wù)發(fā)現(xiàn),是否從Eureka中獲取注冊(cè)信息
    serviceUrl: #Eureka客戶端與Eureka服務(wù)端的交互地址,高可用狀態(tài)配置對(duì)方的地址,單機(jī)狀態(tài)配置自己(如果不配置則默認(rèn)本機(jī)8761端口)
      defaultZone: ${EUREKA_SERVER:http://eureka02:50102/eureka/}

3、配置hostname
Eureka 組成高可用,兩個(gè)Eureka互相向?qū)Ψ阶?cè),這里需要通過域名或主機(jī)名訪問,這里我們?cè)O(shè)置兩個(gè)Eureka服務(wù)的主機(jī)名分別為 eureka01、eureka02。
完整的eureka配置如下:

eureka:
  client:
    registerWithEureka: true #服務(wù)注冊(cè),是否將自己注冊(cè)到Eureka服務(wù)中
    fetchRegistry: true #服務(wù)發(fā)現(xiàn),是否從Eureka中獲取注冊(cè)信息
    serviceUrl: #Eureka客戶端與Eureka服務(wù)端的交互地址,高可用狀態(tài)配置對(duì)方的地址,單機(jī)狀態(tài)配置自己(如果不配置則默認(rèn)本機(jī)8761端口)
      defaultZone: ${EUREKA_SERVER:http://eureka02:50102/eureka/}
  server:
    enable‐self‐preservation: false #是否開啟自我保護(hù)模式
    eviction‐interval‐timer‐in‐ms: 60000 #服務(wù)注冊(cè)表清理間隔(單位毫秒,默認(rèn)是60*1000)
  instance:
    hostname: ${EUREKA_DOMAIN:eureka01}

4、在IDEA中制作啟動(dòng)腳本
啟動(dòng)1:


image.png

啟動(dòng)2:


image.png

5、在host文件配置

127.0.0.1 eureka01
127.0.0.1 eureka02

運(yùn)行兩個(gè)啟動(dòng)腳本,分別瀏覽:
http://localhost:50101/
http://localhost:50102/
Eureka主畫面如下

image.png

1.3.3 服務(wù)注冊(cè)

1.3.3.1 將cms注冊(cè)到Eureka Server

1、在服務(wù)中添加依賴

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

2、在application.yml配置

eureka:
  client:
    registerWithEureka: true #服務(wù)注冊(cè)開關(guān)
    fetchRegistry: true #服務(wù)發(fā)現(xiàn)開關(guān)
    serviceUrl: #Eureka客戶端與Eureka服務(wù)端進(jìn)行交互的地址,多個(gè)中間用逗號(hào)分隔
      defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/,http://localhost:50102/eureka/}
  instance:
    prefer-ip-address:  true  #將自己的ip地址注冊(cè)到Eureka服務(wù)中
    ip-address: ${IP_ADDRESS:127.0.0.1}
    instance-id: ${spring.application.name}:${server.port} #指定實(shí)例id

3、在啟動(dòng)類上添加注解

在啟動(dòng)類上添加注解 @EnableDiscoveryClient ,表示它是一個(gè)Eureka的客戶端

4、刷新Eureka Server查看注冊(cè)情況


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容