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
元數據使用Eureka 的元數據有兩種類型,分別是框架定好了的標準元數據和用戶自定義元數據。標準元數據指的是主機名、IP 地址、端口號、狀態頁和健康檢查等信息,這些信息都會被髮布在服務註冊表中,用於服務之間的調用。自定義元數據可使用 eureka.instance.metadataMap 進行配置。
在配置文件中添加github
eureka: instance: metadata-map: port: ${server.port} user: yucai applicationName: ${spring.application.name}
能夠看到spring
@GetMapping("/getApiInfo") public Object getApiInfo(){ return eurekaClient.getInstancesByVipAddress("MYEUREKA-SERVICE", false); }
postman中調用一下,能夠獲取到以下信息
json
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 中提供了事件監聽的方式來擴展。
目前支持的事件以下:
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 集羣環境下,每一個節點都會觸發事件,這個時候須要控制下發送通知的行爲,不控制的話每一個節點都會發送通知。