springcloud-服務註冊與發現

一 前言

本篇文章主講eureka的高可用結構,eureka爲何比傳統的註冊中心性能更佳,eureka是如何進行服務的註冊與發現;在本篇文章中不會教出初學者進行如何搭建聚合工程,而是給出具體的client , server代碼。java

二 eureka介紹

eureka 是 一個服務註冊與發現的組件 ,其可以更好的支持負載均衡和服務中間層,一般有 Eureka server (提供REST服務), Euraka client(消費REST服務),它們之間經過 service 交流更加的簡便。git

三 eureka 與傳統的註冊中心有什麼區別

傳統的註冊中心工做於暴露的IP地址和主機名,在服務的註冊與發現中進行加載負載均衡的過程會更加的繁瑣;eureka在中間層提供了加載負載均衡機制,彌補了傳統的註冊中心的不足之處,使加載負載均衡更加簡便,性能方面也顯著提升;github

四 eureka高可用結構

在這裏插入圖片描述

  1. eureka的空間分佈中每一個集羣的一個節點(例如 us-east-lc)就是一個區域(Region),每一個region中有許多的的分區(Zone),分區中存放的是client;每一個eureka server中至少會有一個zone用於處理zone失敗的狀況;web

  2. euraka的region會發現本身區域中的實例(instance)spring

  3. 當服務端註冊到 eureka server 時,會每隔30秒發送一次心跳給server 用於從新租約;app

  4. 若是客戶端不可以從新租約,那麼90秒後會從服務列表中剔除;負載均衡

  5. 集羣節點1的註冊信息會被複制給節點2,以此類推,保證了eueka來自任何zone的客戶端(30秒一次)均可以查找region的信息用於發現可用服務進行遠程調用;spring-boot

四 父工程pom.xm

這邊使用的是比較新的cloud版本爲Finchley.SR2,boot版本 2.0.6;性能

 <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.6.RELEASE</version>
      <relativePath/>
  </parent>
  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <!-- SpringCloud版本 -->
      <spring-cloud.version>Finchley.SR2</spring-cloud.version>
      <start-web.version>2.0.4.RELEASE</start-web.version>
  </properties>

  <!-- cloud工程版本管理 -->
  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>${spring-cloud.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
              <version>${start-web.version}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-test</artifactId>
              <scope>test</scope>
          </dependency>
      </dependencies>
  </dependencyManagement>

  <dependencies>
      <!-- web啓動器 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>

五 eureka server

5.1 pom.xml

 <dependencies>
      <!-- Eureka服務端 -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      </dependency>
  </dependencies>

5.2 application.yml

application.yml中定義了 application server 的 端口爲10086 ,eureka的實例主機名爲localhost;application server 相對於 eureka server 其也是 client ; 做爲 server 是禁止向本身註冊服務;service-url 表示其餘的 client 能夠經過此路徑,將服務註冊在server 上,或者從 server上發現有那些服務;字體

server:
port: 10086

eureka:
instance:
  hostname: localhost
client:
  # 做爲server,表示禁止向本身註冊
  register-with-eureka: false
  fetch-registry: false
  service-url:
    defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

5.3 server啓動類

@EnableEurekaServer註解表示開啓eureka server功能,做爲 application server;

/**
* @Author lsc
* <p> eureka 服務端 </p>
*/
@SpringBootApplication
@EnableEurekaServer//表示開啓eureka server功能
public class EurekaServerApp {

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

}

5.4 訪問結果

訪問路徑也就是是server-url: http://localhost:10086/ ; 以下圖所示,因爲只啓動了server,沒有其它服務向其註冊,因此服務列表的實例爲空; 在這裏插入圖片描述

六 eureka client

6.1 pom.xml

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

6.2 application.yml

client 的 端口地址爲8090,而且將應用名稱名爲爲 eureka-client,在服務列表便於區分是哪一個實例;服務的註冊地址也就是server的地址;

server:
port: 8090

spring:
application:
  name: eureka-client # 應用名稱

eureka:
client:
  service-url:
    # 服務註冊地址
    defaultZone: http://localhost:10086/eureka/

6.3 client 啓動類

@EnableEurekaClient註解表示開啓 eureka client 做爲 application client;

/**
* @Author lsc
* <p> </p>
*/
@SpringBootApplication
@EnableEurekaClient//表示開啓 eureka client
public class EurekaClientApp {

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

6.4 訪問結果

從頁面中能夠看見咱們向server 註冊了一個名爲 EUREKA-CLIENT的服務,紅色字體目前不用管它,是eureka的健康保護機制,前面提到的若是client 30秒以內未續租,90秒後會被剔除; 在這裏插入圖片描述

相關文章
相關標籤/搜索