欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud?Eureka應用全面介紹

 更新時間:2022年09月15日 11:42:15   作者:扎哇太棗糕  
Eureka是Netflix開發(fā)的服務發(fā)現(xiàn)框架,本身是一個基于REST的服務,主要用于定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉(zhuǎn)移的目的

Eureka

什么是服務治理

為什么需要服務治理?

  服務治理是主要針對分布式服務框架的微服務,處理服務調(diào)用之間的關系、服務發(fā)布和發(fā)現(xiàn)、故障監(jiān)控與處理,服務的參數(shù)配置、服務降級和熔斷、服務使用率監(jiān)控等。

需要服務治理的原因:

  • 過多的服務 URL 配置困難
  • 負載均衡分配節(jié)點壓力過大的情況下,需要部署集群
  • 服務依賴混亂,啟動順序不清晰
  • 過多服務,導致性能指標分析難度較大,需要監(jiān)控
  • 故障定位與排查難度較大

什么是服務注冊與發(fā)現(xiàn)

  服務注冊主要針對服務提供者,服務啟動后需要將本身以別名的方式注冊到注冊中心上;而服務發(fā)現(xiàn)主要是針對消費者(服務使用者),它在調(diào)用服務的時候需要通過別名去注冊中心獲取到相應的服務,然后再實現(xiàn)本地RPC調(diào)用遠程RPC的功能。

Eureka的兩大組件

  Eureka Server: 提供注冊服務,各節(jié)點啟動時,會在EurekaServer中進行注冊,各服務的節(jié)點信息會儲存在EurekaServer中的服務注冊表中。

  Eureka Client: 其本質(zhì)是一個Java客戶端,用于簡化Eureka Server的交互,客戶端同時也具備一個內(nèi)置的使用負載算法的負載均衡器在啟動應用后將會向Eureka Server發(fā)送心跳(默認周期30s),如果EurekaServer在多個心跳周期內(nèi)沒有接收到某節(jié)點的心跳,將會把該節(jié)點從服務注冊表上移除(默認周期90s)

Eureka的使用

Eureka服務端server的創(chuàng)建

  首先是創(chuàng)建一個子模塊作為eureka的服務器模塊,主要與其他的子模塊有以下三處不同:

一、導入eureka服務端的依賴

<!-- 服務注冊中心的服務端 eureka-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

二、配置文件配置eureka相關

# eureka的單機版配置
eureka:
  instance:
    hostname: localhost  #eureka服務端的實例名字
  client:
    register-with-eureka: false    #表示不向注冊中心注冊自己
    fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務
    service-url:
      #設置與eureka server交互的地址查詢服務和注冊服務都需要依賴這個地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

三、主程序類上使用注解開啟服務器

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

Eureka客戶端client的創(chuàng)建

  之前創(chuàng)建的支付子模塊8001就可以標記為Eureka的客戶端,我們需要做的和Eureka服務端的三步一樣:

一、導入eureka客戶端的依賴

<!--Eureka客戶端依賴-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

二、配置文件配置eureka相關

eureka:
  client:
    register-with-eureka: true #是否向注冊中心注冊自己
    fetchRegistry: true #是否從注冊中心抓取已有的注冊信息 默認true
    service-url:
      defaultZone: http://localhost:7001/eureka #服務端的地址

三、主程序類使用注解開啟客戶端

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

  紅框顯示當前名稱為CLOUD-PAYMENT-SERVICE的服務狀態(tài)為UP,也就是說這個模塊已經(jīng)被注冊進了eureka服務

  目前為止,我們的eureka服務端上就只有一個支付模塊作為服務的提供者注冊進eureka服務器,并沒有服務的調(diào)用者,于是乎我們可以將80端口的消費者模塊通過以上三步,將其作為eureka客戶端注冊進eureka服務器,讓其實現(xiàn)服務的調(diào)用

集群搭建

Eureka服務端的集群搭建

  想必集群的好處這里就不需要再進行贅述了,單體的服務器一旦出現(xiàn)故障整個項目就搞崩了,如果是集群就不一樣了,一個故障其他頂上,服務之間可以實現(xiàn)互相注冊相互守望

  現(xiàn)在我們就創(chuàng)建一個新的服務端子模塊命名7002,作為集群中的另一個模塊使用。那么,如何實現(xiàn)互相注冊相互守望呢?答案就是:分別在配置文件中配置,使集群中的服務都能互相發(fā)現(xiàn),其中最重要的就是defaultZone字段的對應值

server:
  port: 7001

# eureka的單機版配置
eureka:
  instance:
    hostname: eureka7001.com  #eureka服務端的實例名字,這里以localhost代替
  client:
    register-with-eureka: false    #表示不向注冊中心注冊自己
    fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 單機版,指向的是自己
      # 集群版,指向集群中的其他服務
      defaultZone: http://eureka7002.com:7002/eureka/,
                   http://eureka7003.com:7003/eureka/

server:
  port: 7002

# eureka的單機版配置
eureka:
  instance:
    hostname: eureka7002.com   #eureka服務端的實例名字,這里以localhost代替
  client:
    register-with-eureka: false    #表示不向注冊中心注冊自己
    fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 單機版,指向的是自己
      # 集群版,指向集群中的其他服務
      defaultZone: http://eureka7001.com:7001/eureka/,
                   http://eureka7003.com:7003/eureka/

server:
  port: 7003

# eureka的單機版配置
eureka:
  instance:
    hostname: localhost  # eureka服務端的實例名字,這里以localhost代替
  client:
    register-with-eureka: false    #表示不向注冊中心注冊自己
    fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 單機版,指向的是自己
      # 集群版,指向集群中的其他服務
      defaultZone: http://eureka7001.com:7001/eureka/,
                   http://eureka7002.com:7002/eureka/

  集群搭建完畢之后,服務也要向集群中的所有模塊進行注冊,那么就需要使用配置文件了,這里以服務調(diào)用者80端口為例

server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: true #是否向注冊中心注冊自己
    fetchRegistry: true #是否從注冊中心抓取已有的注冊信息 默認true
    service-url:
#      defaultZone: http://localhost:7001/eureka #服務端的地址

      #服務端的地址,服務端為集群版,向所有的模塊都注冊
      defaultZone: http://localhost:7001/eureka,
                   http://localhost:7002/eureka,
                   http://localhost:7003/eureka

Eureka客戶端的集群搭建

  從8001模塊copy一個為8002,作為客戶端集群的另一個模塊,同樣使用配置文件,將其也注冊進服務端集群。此時就可以使用服務調(diào)用者80進行調(diào)用了,但是80的controller是直接寫死的域名和端口,于是需要將域名端口改為微服務的名稱,然后在服務調(diào)用者80模塊開啟負載均衡讓請求合理的分配到服務集群的每一個模塊

將原先的指定域名+端口改為指定服務

配置中開啟負載均衡

這樣集群就部署好了,可以實現(xiàn)服務調(diào)用對8001和8002的輪詢

微服務模塊的相關配置

配置服務的名稱

eureka:
  instance:
    instance-id: payment8001

訪問路徑顯示IP地址

eureka:
  instance:
    prefer-ip-address: true

服務發(fā)現(xiàn)

  所謂的服務發(fā)現(xiàn)就是對于已經(jīng)注冊進eureka里的微服務,可以通過這個方式來獲得該服務的相關信息,實現(xiàn)服務發(fā)現(xiàn)功能分三步走:

一、對象注入

@Resource
private DiscoveryClient discoveryClient;

二、調(diào)用api獲取服務信息

@GetMapping(value = "/discovery")
public Object discovery() {
    List<String> services = discoveryClient.getServices();
    for (String service : services) {
        log.info("***********service: " + service);
    }
    List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    for (ServiceInstance instance : instances) {
        log.info(instance.getServiceId() + "\t"
                + instance.getHost() + "\t"
                + instance.getPort() + "\t"
                + instance.getUri());
    }
    return this.discoveryClient;
}

三、主程序入口注解開啟發(fā)現(xiàn)功能

@EnableDiscoveryClient

這樣即可打印服務的相關信息

自我保護機制

什么是自我保護機制

  EurekaServer會檢查最近15分鐘內(nèi)所有EurekaClient正常心跳占比,如果低于85%就會觸發(fā)自我保護機制,此時Eureka暫時把這些失效的服務保護起來,不會立即將其剔除。Eureka在啟動完成后,每隔60秒會檢查一次服務健康狀態(tài),如果這些暫時失效的服務過一段時間后(默認90秒)還是沒有恢復,就會把這些服務剔除。反之這個服務就不會因為網(wǎng)絡的延時、卡頓、擁擠等問題而被錯誤刪除。

  總而言之,自我保護機制就是說某一時刻微服務不可用時,Eureka不會立即將其剔除,而是在一段時間內(nèi)等待其正常發(fā)送心跳。這屬于CAP原則的AP分支,主要保證了可用性和分區(qū)容錯性

如何禁用自我保護機制

  服務端使用配置文件關閉eureka的自我保護機制

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

  客戶端使用配置文件設置心跳相關配置

eureka:
  instance:
    # Eureka客戶端向服務端發(fā)送心跳的時間間隔,單位為秒(默認是30秒)
    lease-renewal-interval-in-seconds: 1
    # Eureka服務端在收到最后一次心跳后等待時間上限,單位為秒(默認是90秒),超時將剔除服務
    lease-expiration-duration-in-seconds: 2

到此這篇關于SpringCloud Eureka應用全面介紹的文章就介紹到這了,更多相關SpringCloud Eureka內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼

    Java實現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼

    Java對各種變量、方法和類等要素命名時使用的字符序列稱為標識符,凡是自己可以起名字的地方都叫標識符。本文為大家分享了Java中如何實現(xiàn)駝峰命名與下劃線命名的互轉(zhuǎn),感興趣的可以了解一下
    2022-05-05
  • Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(共享模式)

    Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(共享模式)

    這篇文章主要為大家詳細介紹了Java并發(fā)系列之AbstractQueuedSynchronizer源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java中鍵盤輸入的幾種常見方式小結(jié)

    Java中鍵盤輸入的幾種常見方式小結(jié)

    本文主要介紹了Java中鍵盤輸入的幾種常見方式小結(jié),主要是三種方式IO流、Scanner類、BufferedReader寫入,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • java堆棧跟蹤工具jstack的使用教程

    java堆棧跟蹤工具jstack的使用教程

    jstack(stack?trace?for?java)是java虛擬機自帶的一種堆棧跟蹤工具,主要用于生成java虛擬機當前時刻的線程快照,下面我們就來學習一下它的具體使用吧
    2023-11-11
  • SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務

    SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務

    SpringBoot中的@Scheduled注解為定時任務提供了一種很簡單的實現(xiàn),本文主要介紹了SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot SpringEL表達式的使用

    SpringBoot SpringEL表達式的使用

    本文主要介紹了SpringEL表達式的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • idea.vmoptions 最佳配置方案

    idea.vmoptions 最佳配置方案

    本文介紹了針對IntelliJ IDEA的優(yōu)化配置建議,包括提升內(nèi)存設置、啟用G1垃圾回收器、優(yōu)化垃圾回收策略以及調(diào)整網(wǎng)絡設置等,旨在提高IDE的性能和響應速度,同時,指導用戶如何修改vmoptions文件以應用這些配置,并提供了監(jiān)控內(nèi)存使用和插件管理的建議
    2024-09-09
  • 淺析Java SPI 與 dubbo SPI

    淺析Java SPI 與 dubbo SPI

    在Java中SPI是被用來設計給服務提供商做插件使用的。本文重點給大家介紹Java SPI 與 dubbo SPI的相關知識及區(qū)別介紹,感興趣的朋友跟隨小編一起學習下吧
    2021-05-05
  • Java為什么匿名內(nèi)部類參數(shù)引用需要用final進行修飾?

    Java為什么匿名內(nèi)部類參數(shù)引用需要用final進行修飾?

    今天小編就為大家分享一篇關于Java為什么匿名內(nèi)部類參數(shù)引用需要用final進行修飾?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 解決無法解析javax.servlet的方法

    解決無法解析javax.servlet的方法

    最近在創(chuàng)建一個servlet時,自動生成的代碼中出現(xiàn)servlet無法解析的提示,令我無法正常使用servlet里的方法,在對各個步驟進行查看后,發(fā)現(xiàn)了問題所在,需要的朋友可以參考下
    2021-05-05

最新評論