springcloud~服務註冊與發現Eureka的使用
服務註冊與發現是微服務裡的概念,也是一個基本的元件,負責服務元件的認證,即實現『你是誰』的功能,在服務註冊與發現裡,存在兩種模式,即服務端發現和客戶端發現,咱們今天說的eureka屬於客戶端發現!
下面概念來自文章:https://blog.csdn.net/forezp/article/details/73017664
下面看幾個服務註冊與發現的基本概念:
-
Register:服務註冊
當Eureka客戶端向Eureka Server註冊時,它提供自身的元資料,比如IP地址、埠,執行狀況指示符URL,主頁等。 -
Renew:服務續約
Eureka客戶會每隔30秒傳送一次心跳來續約。 通過續約來告知Eureka Server該Eureka客戶仍然存在,沒有出現問題。 正常情況下,如果Eureka Server在90秒沒有收到Eureka客戶的續約,它會將例項從其登錄檔中刪除。 建議不要更改續約間隔。 -
Fetch Registries:獲取註冊列表資訊
Eureka客戶端從伺服器獲取登錄檔資訊,並將其快取在本地。客戶端會使用該資訊查詢其他服務,從而進行遠端呼叫。該註冊列表資訊定期(每30秒鐘)更新一次。每次返回註冊列表資訊可能與Eureka客戶端的快取資訊不同, Eureka客戶端自動處理。如果由於某種原因導致註冊列表資訊不能及時匹配,Eureka客戶端則會重新獲取整個登錄檔資訊。 Eureka伺服器快取註冊列表資訊,整個登錄檔以及每個應用程式的資訊進行了壓縮,壓縮內容和沒有壓縮的內容完全相同。Eureka客戶端和Eureka 伺服器可以使用JSON / XML格式進行通訊。在預設的情況下Eureka客戶端使用壓縮JSON格式來獲取註冊列表的資訊。 -
Cancel:服務下線
Eureka客戶端在程式關閉時向Eureka伺服器傳送取消請求。 傳送請求後,該客戶端例項資訊將從伺服器的例項登錄檔中刪除。該下線請求不會自動完成,它需要呼叫以下內容:
DiscoveryManager.getInstance().shutdownComponent(); -
Eviction 服務剔除
在預設的情況下,當Eureka客戶端連續90秒沒有向Eureka伺服器傳送服務續約,即心跳,Eureka伺服器會將該服務例項從服務註冊列表刪除,即服務剔除。
大叔演示服務發現與註冊的環境:
- intellij idea開發工具
- gradle4.6構建工具
- java1.8執行時
- springboot腳手架
Eureka Server端的實現:
依靠包
dependencies { compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server') testCompile('org.springframework.boot:spring-boot-starter-test') }
配置項
server.port: 8761 management.port: 8762 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://localhost:8761/eureka/
啟動程式碼
@EnableEurekaServer @EnableDiscoveryClient @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
訪問:http://localhost:8761/
Eureka Client端的加入:
服務端啟動後,它裡面的應用是空的,這時我們新增一個客戶端,注意,這裡的客戶端是指Eureka的,它可能對於其它服務來說,是個服務端,為其它介面提供資料的,這是有可能的。(我這個客戶端同時引用了配置中心的概念,它也是配置中心的使用端,這個專案的配置檔案通過配置中心來統一進行分散式管理)
依賴包
dependencies { compile('org.springframework.boot:spring-boot-starter-web', 'org.springframework.cloud:spring-cloud-starter-config', 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server') testCompile('org.springframework.boot:spring-boot-starter-test') }
配置項
spring: application: name: email-client cloud: config: uri: http://localhost:8200 server: port: 8300 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
啟動程式碼
@EnableEurekaClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
我們啟動它之後,去eureka server介面去檢視, http://localhost:8761,你會發現,我們的服務出現在了服務列表裡!
感謝各位的閱讀!
謝謝!