SpringCloud學習心得—1.3—Eureka與REST API

SpringCloud學習心得—1.3—Eureka與REST API


Eureka的REST API接口

API的基本訪問

Eureka REST APIEureka 做爲註冊中心,其本質是存儲了每一個客戶端的註冊信息,Ribbon 在轉發的時候會獲取註冊中心的服務列表,而後根據對應的路由規則來選擇一個服務給 Feign 來進行調用。java

若是咱們不是Spring Cloud 技術選型,也想用 Eureka,能夠嗎?徹底能夠。
若是不是 Spring Cloud 技術棧,推薦用 Zookeeper,這樣會方便些,固然用 Eureka 也是能夠的,這樣的話就會涉及如何註冊信息、如何獲取註冊信息等操做。其實 Eureka 也考慮到了這點,提供了不少 REST 接口API 來給咱們調用。http://localhost:8761/eureka/apps/eureka中的服務名

若是想返回 Json數據的格式,能夠用一些接口測試工具來請求,好比 Postman,在請求頭中添加代碼Content-Type:application/json Accept:application/json便可。
若是 Eureka 開啓了認證,記得添加認證信息,用戶名和密碼必須是 Base64 編碼過的 Authorization:Basic 用戶名:密碼,其他的接口就不作過多講解了,你們能夠本身去嘗試。Postman 直接支持了 Basic 認證,將選項從 Headers 切換到 Authorization,選擇認證方式爲 Basic Auth 就能夠填寫用戶信息了。git

API返回值中添加元數據metadata

元數據使用Eureka 的元數據有兩種類型,分別是框架定好了的標準元數據和用戶自定義元數據。標準元數據指的是主機名、IP 地址、端口號、狀態頁和健康檢查等信息,這些信息都會被髮布在服務註冊表中,用於服務之間的調用。自定義元數據可使用 eureka.instance.metadataMap 進行配置。
在配置文件中添加github

eureka:
    instance:
        metadata-map:
            port: ${server.port}
            user: yucai
            applicationName: ${spring.application.name}

能夠看到spring

集成Eureka後獲取數據

  1. 使用EurekaClient
    在咱們的eureka-ervice中,簡單獲取一下信息,

    @GetMapping("/getApiInfo")
    public Object getApiInfo(){
        return eurekaClient.getInstancesByVipAddress("MYEUREKA-SERVICE", false);
    }

    postman中調用一下,能夠獲取到以下信息
    json

  2. 使用DiscoveryClient
    在咱們的eureka-ervice中,簡單獲取一下信息,

    import org.springframework.cloud.client.discovery.DiscoveryClient;
    ...
    @GetMapping("/getApiInfoByDiscoveryClient")
    public Object getApiInfoByDiscoveryClient() {
        return discoveryClient.getInstances("MYEUREKA-SERVICE");
    }

    postman中調用一下,能夠獲取到以下信息
    app

服務異常下線的監測

健康檢查默認狀況下,Eureka 客戶端是使用心跳和服務端通訊來判斷客戶端是否存活,在某些場景下,好比 MongoDB 出現了異常,但你的應用進程仍是存在的,這就意味着應用能夠繼續經過心跳上報,保持應用本身的信息在 Eureka 中不被剔除掉。框架

Spring Boot Actuator 提供了 /actuator/health 端點,該端點可展現應用程序的健康信息,當 MongoDB 異常時,/actuator/health 端點的狀態會變成 DOWN,因爲應用自己確實處於存活狀態,可是 MongoDB 的異常會影響某些功能,當請求到達應用以後會發生操做失敗的狀況。ide

在這種狀況下,咱們但願能夠將健康信息傳遞給 Eureka 服務端。這樣 Eureka 中就能及時將應用的實例信息下線,隔離正常請求,防止出錯。
代碼中添加配置工具

eureka:
    healthcheck:
      enabled: true

模擬異常狀況:定義一個擴展端點,將狀態設置爲 DOWNpost

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health.Builder;
import org.springframework.stereotype.Component;


@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {

    @Override
    protected void doHealthCheck(Builder builder) throws Exception {
        builder.down().withDetail("status", false);
    }
}

能夠看到咱們的服務狀態就是down了

服務上下線監控在某些特定的需求下,咱們須要對服務的上下線進行監控,上線或下線都進行郵件通知,Eureka 中提供了事件監聽的方式來擴展。

Euraka事件監聽

目前支持的事件以下:

  1. EurekaInstanceCanceledEvent 服務下線事件。
  2. EurekaInstanceRegisteredEvent 服務註冊事件。
  3. EurekaInstanceRenewedEvent 服務續約事件。
  4. EurekaRegistryAvailableEvent Eureka 註冊中心啓動事件。
  5. EurekaServerStartedEvent Eureka Server 啓動事件。

eureka-server中添加

@Component
public class EurekaStateChangeListener {
    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        System.err.println(event.getServerId() + "\t" + event.getAppName() + " 服務下線 ");
    }
    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        System.err.println(instanceInfo.getAppName() + " 進行註冊 ");
    }
    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        System.err.println(event.getServerId() + "\t" + event.getAppName() + " 服務進行續約 ");
    }
    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        System.err.println(" 註冊中心啓動 ");
    }
    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        System.err.println("Eureka Server啓動 ");
    }
}

注意:在 Eureka 集羣環境下,每一個節點都會觸發事件,這個時候須要控制下發送通知的行爲,不控制的話每一個節點都會發送通知。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

相關文章
相關標籤/搜索