1. 程式人生 > >springcloud-eureka叢集-健康檢測

springcloud-eureka叢集-健康檢測

我們在使用eureka服務的時候,如果其中一個服務提供者掛掉,而客戶端並不知道從而繼續呼叫服務,會導致異常的發生。所以eureka在服務中心會呼叫服務註冊者的狀態,客戶端在向服務中心獲取服務狀態的時候會知道哪個服務提供者已經下線,從而不再繼續呼叫該服務,這裡就用到了eureka的健康檢測,非常簡單,幾個配置搞定。

首先是服務中心的配置-application.yml:

server:
  port: 8761
spring:
  profiles: eureka-colony1
eureka:
  instance:
    hostname: eureka-colony1
  client:
registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://eureka-colony2:8762/eureka/ server: # 關閉自我保護 enable-self-preservation: false # 清理伺服器 eviction-interval-timer-in-ms: 5000

其次在服務提供者中加入健康檢測依賴 pom.xml:

<dependency>
   <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> </dependency>

修改服務提供者的配置檔案application.yml:

spring:
  application:
    name: eureka-service

# 可訪問全部敏感埠
# /evn 服務的全部環境變數資訊
# /health 當前服務狀態
endpoints:
  sensitive: false

eureka:
  instance:
#心跳設定,告訴伺服器該例項仍在使用
lease-renewal-interval-in-seconds: 
5 #告訴伺服器如果10秒內未傳送任何續約請求,則關閉該客戶端 lease-expiration-duration-in-seconds: 10 metadata-map: company-name: in client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/, http://127.0.0.1:8762/eureka/ instance-info-replication-interval-seconds: 10 logging: level: com.netflix: DEBUG

實現兩個狀態介面

/**
 * 健康檢查處理器
 * 將服務提供者的健康狀態傳遞給eureka伺服器
 */
@Component
public class MyHealthCheckHandler implements HealthCheckHandler {

    @Autowired
private MyHealthIndicator myHealthIndicator;
@Override
public InstanceInfo.InstanceStatus getStatus(InstanceInfo.InstanceStatus instanceStatus) {
        Status status = myHealthIndicator.health().getStatus();
        if (status.equals(Status.UP)){
            return InstanceInfo.InstanceStatus.UP;
} else {
            return InstanceInfo.InstanceStatus.DOWN;
}
    }
}
/**
 * 自定義健康指示器
 */
@Component
public class MyHealthIndicator implements HealthIndicator {

    @Override
public Health health() {
        if(MyRestController.isDB){
            return new Health.Builder(Status.UP).build();
} else{
            return new Health.Builder(Status.DOWN).build();
}
    }
}

編寫一個Controller,用來修改某個服務提供者的狀態,這裡應該是判斷某個DB連結是否有效,這裡用一個bool值來演示eureka服務的狀態變化。

@RestController
public class MyRestController {

    public static boolean isDB = true;
@GetMapping(value = "/setIsDB/{isDB}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public void setIsDB(@PathVariable boolean isDB) {
        this.isDB = isDB;
}

}

最後是服務客戶端,修改application.yml:

server:
  port: 8666

spring:
  application:
    name: eureka-invocation

eureka:
  instance:
# 心跳設定,告訴伺服器該例項仍在使用
lease-renewal-interval-in-seconds: 5
    # 告訴伺服器如果10秒內未傳送任何續約請求,則關閉該客戶端
lease-expiration-duration-in-seconds: 10

  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/, http://127.0.0.1:8762/eureka/
    # 抓取服務列表
registry-fetch-interval-seconds: 30

logging:
  level:
    com.netflix: DEBUG
測試,依次啟動服務註冊中心,服務提供者和服務客戶端,現在的服務提供者預設是可以訪問的,呼叫localhost:8081/setIsDB/false方法,將服務提供者的狀態設定為false,這時再訪問服務中心的8761埠如下圖:


此時的服務客戶端的logger資訊中也只能看到自己,8081的服務提供者在服務中心的狀態為DOWN,所以不能為客戶端提供服務


當我們再次將8081的服務狀態變為true之後,服務才可以繼續使用,呼叫介面localhost:8081/setIsDB/true,服務客戶端的logger檔案可以看到,8081埠被再次加入到eureka中心,並再次被服務客戶端使用


相關推薦

springcloud-eureka叢集-健康檢測

我們在使用eureka服務的時候,如果其中一個服務提供者掛掉,而客戶端並不知道從而繼續呼叫服務,會導致異常的發生。所以eureka在服務中心會呼叫服務註冊者的狀態,客戶端在向服務中心獲取服務狀態的時候會知道哪個服務提供者已經下線,從而不再繼續呼叫該服務,這裡就用到了eure

springcloud Eureka 叢集

Eureka 叢集測試 開始學習springcloud體系,記錄下相關筆記。配置叢集過程,參考不少帖子,碰到出現available-replicas 為空的情況,在https://github.com/Netflix/eureka/issues/1008 找到解決辦法 springc

勤勞的搬運工--SpringCloud--Eureka叢集

基本原理 上圖是來自eureka的官方架構圖,這是基於叢集配置的eureka; - 處於不同節點的eureka通過Replicate進行資料同步 - Application Service為服務提供者 - Application Client為服務消費者 

SpringCloud --Eureka叢集搭建(高可用服務註冊中心)

Eureka是Spring Cloud框架裡的核心服務, 幾乎每個服務都依賴它。 所以要建立多個Eureka例項程序, 即使其中一個程序掛了, 註冊中心功能仍然正常執行。為了實現高可用,必須叢集   增加Eureka服務註冊中心配置檔案: application-pe

SpringCloud Eureka叢集配置

步驟一:建立埠為7002,7003的maven工程 建立7002,7003子module,將7001依賴貼入7002,7003 pm.xml <dependencies> <

springcloud-eureka叢集-整合feign框架自定義攔截器

@Configuration public class BaseConfig { @Bean public RequestInterceptor getRequestInterceptor(){ return new RequestIntercep

springcloud-eureka叢集-自定義負載均衡規則

1、首先在服務呼叫者專案中實現IRule介面,用隨機數控制呼叫服務的埠 importjava.util.List; import java.util.Random; import com.netflix.loadbalancer.ILoadBalancer; import

springcloud-eureka叢集-整合hystrix框架-配置監控

1、在服務呼叫者(hystrix客戶端)的依賴檔案pom.xml加入檢測依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

springcloud-eureka叢集-整合Rabbit訊息中介軟體

一、配置好rabbitmq伺服器二、編寫訊息傳送者新增依賴pom.xml<!-- 訊息驅動 --> <dependency> <groupId>org.springframework.cloud</groupId>

SpringCloud-Eureka服務註冊與發現之叢集配置(五)

1.構建多個Eureka服務端,具體步驟參考單機版的Eureka服務端構建步驟 2.修改每個Eureka服務端yml檔案,將對外暴露的註冊介面地址由一個變成多 個,自身的暴露地址除外

SpringCloud從入門到進階(三)——原始碼探究Eureka叢集之replicas的unavailable故障

內容   本節從原始碼的角度探討了Eureka控制檯中為何replicas(副本)顯示unavailable(不可用)的原因。在原始碼層級解讀了Eureka Server的replicas是如何解析,以及replica的狀態是如何判定。 版本   IDE:IDEA 2017.2.2 x64   JDK

利用eureka構建一個簡單的springCloud分散式叢集

1  通過新建module中的spring initializer新建三個模組,分別是eureka, service-provider, service-consumer 2  一般自動匯入的依賴就是正確可用的,但是eureka中的spring-cloud-starter-netflix-eureka-cl

SpringCloud--04、Eureka叢集

Eureka架構中的三個核心角色: - 服務註冊中心 Eureka的服務端應用,提供服務註冊和發現功能,就是剛剛我們建立的eureka-demo - 服務提供者 提供服務的應用,可以是SpringBoot應用,也可以是其它任意技術實現, 只要對外提供的是Rest風格服務即可。本例中

SpringCloud入門(eureka叢集和feign負載均衡)

什麼是springcloud? 這是spring官網對springcloud的介紹,大致意思就是:讓分散式系統簡單化。springcloud是建立在springboot之上的,也就是說他是需要依賴springboot的,因此學習springcloud首先就要了解spri

SpringCloud(二)Eureka叢集與Feign

兩個Eureka 上一篇是兩個服務像一個Eureka註冊,如果Eureka宕掉了就不好了,現在來搭建兩個Eureka,兩個服務分別像其註冊。兩個Eureka都用本機來模擬,用兩個埠號來表示。 首先修改C:\Windows\System32\drivers\etc的hosts檔案,在最下面新增127.0.0.

SpringCloud微服務開發-Eureka叢集配置

SpringCloud微服務開發-Eureka叢集配置   Eureka叢集圖例 Eureka叢集配置例子如下: 以上圖為例,在我們的Eureka伺服器裡面會啟動兩個例項,這兩個例項會相互註冊。 然後服務提供者也會啟動兩個例項,這兩個例項都會註冊到我們伺服器的

改變eureka server中註冊的服務的健康檢測方式

預設情況下注冊到eureka server的服務是通過心跳來告知自己是UP還是DOWN,並不是通過spring-boot-actuator模組的/health端點來實現的,這樣其實不是很合理。 預設的心跳實現方式可以有效的檢查eureka客戶端程序是否正常運作,但是無法保證

SpringCloudEureka叢集搭建例項

一、說明 Eureka提供基於REST的服務,在叢集中主要用於服務管理。 這裡將會執行二個伺服器例項、二個伺服器提供者例項、然後配合服務呼叫請求服務,進行例項測試。 環境(Win+idea) 目錄結構: 二、Eureka服務端(first-cloud-s

springcloud-eureka搭建高可用服務註冊叢集

服務的註冊和發現可以說是微服務架構中最核心的地方,微服務的服務註冊中心有很多個,之前選了consul作為註冊中心,之所以選擇它是因為它有非常強大的功能,除了服務的註冊發現之外還支援KV儲存、具有多語言能力、支援多資料中心等等,後來發現這些都沒有什麼用,畢竟我們的服務是純Jav

SpringCloud---Eureka Server叢集

單節點Eureka Server並不適合線上生產環境,Eureka Client會定時連線Eureka Serve,獲取服務登錄檔中資訊並快取到本地。微服務在消費遠端API時總是使用本地快取中的資料。因此,eureka Server發生宕機,也不會影響服務之間的