天天看點

使用Consul或者Eureka作為注冊中心時,微服務如何擷取自身服務基本資訊問題來源如何解決最終效果

本文簡要介紹在SpringCloud架構下,使用Eureka或者Consule時,如何擷取服務自身基本資訊(也可以使用對應對象類擷取其他服務或者所有服務的資訊)。

問題來源

使用微服務時,有時候需要将微服務自身一些資訊記錄下來供debug或者業務功能使用。例如一個user-service服務有多個執行個體在運作,但個别執行個體有問題,我們就需要在日志記錄user-service的具體執行個體作為排查依據。或者我們的服務worker-service有多個執行個體,然後一部分工作會配置設定到workerA,一部分會配置設定到workerB,我們需要在資料庫或者其他記錄目前這些工作在哪個執行個體上?如果我們重新開機workerA會影響哪些工作?如果需要取消任務,隻能調用workerA的ip和端口(如果worker-service沒有實作叢集模式,隻能去對應服務執行個體上取消任務)。

注意:

本文基于consul 1.1.0, SpringCloud Finchley.RELEASE, SpringBoot 2.0.1

如何解決

SpringClould為我們提供了幾個主要類

查詢自身服務注冊資訊

Registration類 通用的,無論是使用Eureka還是Consul作為注冊中心都能使用。

ConsulRegistration類, 當Consul作為注冊中心使用。

EurekaInstanceConfig接口, 當Eureka作為注冊中心使用。

查詢其他服務的資訊

DiscoveryClient類,通用的,無論是使用Eureka還是Consul作為注冊中心都能使用。

ConsulDiscoveryClient類,當Consul作為注冊中心使用。

檢視源代碼可以發現ConsulRegistration繼承了Registration,新添加getInstanceId方法和getService方法。

使用Consul或者Eureka作為注冊中心時,微服務如何擷取自身服務基本資訊問題來源如何解決最終效果

ConsulDiscoveryClient繼承了DiscoveryClient,新添加getInstances(final String serviceId,

final QueryParams queryParams)方法和getAllInstances方法。

使用Consul或者Eureka作為注冊中心時,微服務如何擷取自身服務基本資訊問題來源如何解決最終效果

EurekaInstanceConfig接口

使用Consul或者Eureka作為注冊中心時,微服務如何擷取自身服務基本資訊問題來源如何解決最終效果

最終效果

完整代碼在這裡,歡迎加星,fork。

使用Consul或者Eureka作為注冊中心時,微服務如何擷取自身服務基本資訊問題來源如何解決最終效果

繼續閱讀