Spring Cloud學習——Eureka

Spring Cloud學習——Eureka

1.Eureka基礎知識

1.1Eureka是什麼?
Spring Cloud Eureka是Spring Cloud Netflix 微服務套件中的一部分,它基於Netflix Eureka做了二次封裝,主要負責完成微服務架構中的服務治理功能。Spring Cloud 通過爲Eureka增加了Spring Boot風格的自動化配置,我們只需通過引入依賴和註解配置就能讓Spring Boot構建的微服務應用輕鬆的與Eureka服務治理體系進行整合。
1.2什麼是服務治理?
服務治理可以說是微服務架構中最爲核心和基礎的模塊,主要用來實現各個微服務實例的自動化註冊與發現。
使用服務治理的原因:在傳統的RPC遠程調用框架中,管理每個服務於服務之間依賴關係比較複雜,管理起來比較困難,所以需要使用服務治理,管理服務與服務之間的依賴關係,可以實現服務調用、負載均衡、容錯等,實現服務發現與註冊。
1.3什麼是服務註冊與發現?
服務註冊:

  • 在服務治理框架中,通常都會有一個服務註冊中心。
  • 每一個微服務實例向註冊中心登記自己提供的服務,將主機、端口號、版本號、通信協議等一些信息告知註冊中心。
  • 註冊中心按服務名分類組織服務清單。
  • 服務註冊中心需要以心跳的方式監測服務清單中的服務是否可用,如果不可用,需要將不可用的服務實例進行剔除。
    在這裏插入圖片描述
    在這裏插入圖片描述

服務發現:
  在服務治理框架的運作下,服務間的調用不再通過指定具體的實例地址來實現,而是通過向服務名發起請求調用實現。所以,服務調用方在調用服務提供方接口時,並不知道具體的服務實例位置。因此,調用方需要向註冊中心諮詢服務,並獲取所有服務的實例清單,以實現對具體服務實例的訪問。比如:有服務C希望調用服務A,服務C就向註冊中心發起諮詢請求,服務註冊中心就會將服務A的位置清單返回給服務C,當服務C要發起調用時,便從該清單中以某種輪詢策略取出一個位置來進行服務調用(客戶端負載均衡)。
  
1.4 Eureka的兩個組件

  • Eureka Server:服務註冊中心。各個微服務節點通過配置啓動後,會在EurekaServer中進行註冊,這樣EurekaServer中的服務註冊表中會存儲所有可用服務節點的信息。
  • Eureka Client:通過註冊中心進行訪問。是一個Java客戶端,用於簡化Eureka Server的交互,客戶端同時也具備一個內置的、使用輪詢負載算法的負載均衡器。在應用啓動後,將會向Eureka Server發生心跳(默認週期爲30s)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務註冊表中把這個節點移除(默認90s)。

1.5 Eureka Server的使用
(1)引入pom依賴

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

(2)編寫application.yml,配置Eureka

server:
  port: 7001


eureka:
  instance:
    hostname: localhost   #eureka服務端的實例名稱
  client:
    register-with-eureka: false   #false表示不向註冊中心註冊自己
    fetch-registry: false   #false表示自己端就是註冊中心
    service-url:
      defaultZone: http://localhost:7001/eureka/   #單機

    # 關閉自我保護機制,保證不可用服務被及時剔除
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 2000
spring:
  application:
    name: cloud-eureka-service

(3)編寫主啓動類,最重要的一個註解@EnableEurekaServer

package com.springcloud;

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

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

(4)啓動一把,在瀏覽器輸入http://localhost:7001/ ,出現以下界面說明Eureka配置成功
在這裏插入圖片描述

1.6 Eureka Client的使用
在另一個微服務模塊中:
(1)引入pom依賴

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

(2)修改application.yml

eureka:
  client:
    register-with-eureka: true   #是否將自己註冊到註冊中心,集羣必須設置爲true配合ribbon
    fetch-registry: true    #是否從服務端抓取已有的註冊信息
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka #,http://eureka7002.com:7002/eureka
  instance:
    instance-id: payment8001
    prefer-ip-address: true  #訪問路徑可以顯示IP地址
    lease-renewal-interval-in-seconds: 1  #向服務端發送心跳的時間間隔,單位爲秒(默認是30秒)
    lease-expiration-duration-in-seconds: 2 #收到最後一次心跳後等待時間上限,單位爲秒(默認是90秒),超時將剔除

(3)在主啓動類中添加註解 @EnableEurekaClient

package com.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

當啓動完此微服務名稱後,該微服務的名稱:

spring:
  application:
    name: cloud-payment-service

會在Eureka中顯示。
微服務RPC遠程服務調用最核心的是什麼呢?
高可用!所以要搭建Eureka註冊中心集羣,實現負載均衡+故障容錯,集羣的原理就是互相註冊,互相守望。集羣的步驟就是修改yml文件的defaultZone爲其他註冊中心的url。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章