天天看點

SpringCloud服務注冊與發現之Eureka

EurekaServer:服務注冊功能的伺服器,是服務的注冊中心,系統中的其他微服務,使用Eureka的用戶端連接配接到Eureka Server并維持心跳連接配接,系統的維護人員可以通過Eureka Server來監控系統中各個微服務是否正常運作,

Eureka Server注冊中心需要引入Eureka Server的jar

在注冊中心中添加依賴

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

Eureka Server注冊中心yml配置

eureka:
  instance:
    hostname: localhost  #eureka服務端的執行個體名字
  client:
    #false表示不向注冊中心注冊自己
    register-with-eureka: false
    #false表示自己端就是注冊中心,我的職責就是維護執行個體,不需要去檢索執行個體
    fetch-registry: false
    service-url:
      #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
           

啟動配置中心服務後通路localhost:7001會有如下界面

SpringCloud服務注冊與發現之Eureka

但此時并沒有服務注冊在Eureka上面,下面将一個微服務添加到Eureka的中策中心上

将一個服務添加到Eureka注冊中心上

① 在微服務的pom上引入Eureka Client的jar包依賴

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

②在微服務的yml檔案上填寫EurekaClient的相關配置

eureka:
  client:
    register-with-eureka: true  #表示是否将自己注冊進EurekaServer  預設是true
    fetch-registry: true        #是否從EurekaServer抓取已有的注冊資訊,預設true.單節點無所謂,叢集必須設定true才能配合ribbon使用負載均衡
    service-url:
      defaultZone: http://localhost:7001/eureka   #表示注冊在這個位址的注冊中心上
           

③别忘了在微服務的啟動類上添加

@EnableEurekaClient

注解哈

啟動服務注冊中心和剛才配好的微服務,通路注冊中心位址:localhost:7001,就會發現頁上發現了剛剛配置好的服務名字了

SpringCloud服務注冊與發現之Eureka

以上就是單機版的Eureka注冊與發現的配置

配置Eureka叢集

EurekaServer的叢集配置實際上就是将多個Eureka互相注冊

和上面的單機版配置差不多,隻是需要注意注意Eureka的服務端名字不能重複

在建立一個EurekaServer,yml檔案的配置如下:

server:
  port: 7002

eureka:
  instance:
    hostname: eureka7002.com  #eureka服務端的執行個體名字
  client:
    #false表示不向注冊中心注冊自己
    register-with-eureka: false
    #false表示自己端就是注冊中心,我的職責就是維護執行個體,不需要去檢索執行個體
    fetch-registry: false
    service-url:
      #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://eureka7001.com:7001/eureka/
           
SpringCloud服務注冊與發現之Eureka

向Eureka Server叢集中添加微服務,隻需将需要添加的服務yml配置檔案中的注冊位址增加EurekaServer的位址即可:

這樣這個服務就會注冊到EurekaServer的叢集中了

SpringCloud服務注冊與發現之Eureka

至此,服務注冊中心叢集已經有多個了,一般實際中不可能兩三個EurekaServer全都挂吧,已經滿足使用要求了,上面我們将服務提供注冊到叢集,但是也要設想一下,萬一服務提供者挂了怎麼辦?是以有必要将服務提供者也設計成叢集的模式.

将服務提供者設定成叢集(多個)

隻需将服務提供者再複制一份即可,但要注意改端口号

多個服務提供者注冊到EurekaServer叢集中,為消費者提供服務,對外暴露的是相同的服務名稱,消費者根據服務者提供的服務名稱進行通路.至于通路的是哪個具體服務,需要有負載均衡機制來決定(預設的負載均衡是輪詢機制).是以需要在消費者端添加負載均衡注解;并且消費者通路的也不在是具體的服務位址和端口号了,而應該改成具體的服務名稱;

SpringCloud服務注冊與發現之Eureka
SpringCloud服務注冊與發現之Eureka

此時,在通路的話,會是輪詢的方式通路服務提供者

有時為了友善管理,我們可能需要定義主機名字.以及讓通路路徑顯示ip位址

SpringCloud服務注冊與發現之Eureka

可以通過配置yml檔案中添加如下内容

eureka:
 instance:
    instance-id: payemnt8002  #自定義的主機名
    prefer-ip-address: true  #通路路徑可以顯示ip位址
           

上面的操作還需要在pom中添加

<!--spring-boot-starter-web和spring-boot-starter-actuato這兩個幾乎永遠在一起,圖形化界面用的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
           

服務發現Discovery

服務發現:對于注冊進Eureka裡面的微服務,可以通過服務發現來獲得該服務的資訊

①在啟動類上添加

@DiscoveryClient

②通過DiscoveryClient 獲得相關資訊,例如:

@Resource
private DiscoveryClient discoveryClient;
public Object discover(){
        List<String> services = discoveryClient.getServices();//得到服務清單清單
        for (String element:services
             ) {
            log.info("**********element"+element);
        }
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for(ServiceInstance instance:instances){
            log.info(instance.getInstanceId()+"\t"+instance.getUri()+"\t"+instance.getPort());
        }
        return this.discoveryClient;
    }
           

Eureka的自我保護機制

保護模式主要用于一組用戶端和EurekaServer之間存在網絡分區場景下的保護.一旦進入保護模式,EurekaServer将會嘗試保護其服務系統資料庫中的資訊,不再删除服務系統資料庫中的資料,也就是不會登出任何微服務.

SpringCloud服務注冊與發現之Eureka
SpringCloud服務注冊與發現之Eureka

繼續閱讀