這篇我們瞭解下服務註冊中心Eureka,類似框架還有Zookeeper、Nacos,各有各的特點,在springcloud中推薦使用eureka,整合起來也是非常簡單。
我們看看eureka的一般組成:
服務端:服務註冊中心,也就是總平臺,提供服務的註冊和發現
客戶端:具體的子模塊,既可以是消費者,也可以是提供者
我們看看大致流程:首先必須有一個服務端,各子模塊在啓動後都要向服務端平臺註冊自己,也就是告訴服務註冊中心我來了,我家在xxx,提供xxx服務,同時會找服務註冊中心要一份服務列表。這個時候服務註冊中心就會把此條註冊信息記錄起來,同時告訴子模塊你必須定期向我報告家裏是否有人(心跳檢測),如果我沒收到報告,我就把你的註冊信息剔除。
這裏要注意,eureka服務端自身也可以當做服務提供者註冊在列表中,這個可用做服務註冊中心的高可用
下面我們按照步驟部署一個服務端(Eureka Server)
<!--增加eureka-server的依賴 -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
然後我們增加一個yml配置
server:
port: 8762
spring:
application:
name: springcloud-eureka
eureka:
client:
fetch-registry: false #否獲取eureka服務器註冊表上的註冊信息,默認爲true
register-with-eureka: false #是否將自己作爲服務註冊,默認爲true
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #和服務註冊中心的連接地址,不用奇怪本身是服務端爲什麼還要配置這個地址,做高可用的時候就發揮作用了,可以以逗號分隔填上其它服務中心地址。
server:
enable-self-preservation: false #服務端是否開啓自我保護模式。這個自我保護模式可以細瞭解一下
eviction-interval-timer-in-ms: 30000 #清理無效節點的時間間隔,這裏爲3s,這裏是個定時器,也就是定時檢測服務狀態
response-cache-update-interval-ms: 3000 #eureka server刷新readCacheMap的時間,eureka中兩個緩存隊列中的一個
responseCacheAutoExpirationInSeconds: 180 #緩存過期時間
peer-eureka-nodes-update-interval-ms: 30 #eureka節點間間隔多長時間更新一次數據。默認10分鐘。
注意下我們在啓動類中加上 @EnableEurekaServer註解,聲明這個是eureka的服務端
啓動後我們訪問 http://localhost:8761/ 可以看到後臺效果,當前是沒有可用服務。
一個簡單的eureka服務端已經跑起來的,接下來我們繼續部署一個客戶端(Eureka Client)
添加客戶端的依賴
<!-- 配置中心-客戶端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
增加配置文件
eureka:
instance:
lease-renewal-interval-in-seconds: 5 #該實例給服務中心發送心跳的間隔時間
prefer-ip-address: true #是否優先使用IP註冊,也就是服務註冊中心顯示的是主機名還是ip
client:
serviceUrl:
defaultZone: http://localhost:8762/eureka/ #服務註冊中心連接地址
registry-fetch-interval-seconds: 5 #從註冊中心獲取註冊信息列表的時間間隔(s),默認爲30秒
依然是在啓動類中加上 @EnableEurekaClient註解,聲明這個是eureka的客戶端
我們可以看到在註冊成功後
服務端日誌
c.n.e.registry.AbstractInstanceRegistry : Registered instance SPRINGCLOUD-EUREKA-CLIENT/DESKTOP-D1E31L8:springcloud-eureka-client:8762 with status UP (replication=false)
客戶端日誌
com.netflix.discovery.DiscoveryClient - DiscoveryClient_SPRINGCLOUD-EUREKA-CLIENT/DESKTOP-D1E31L8:springcloud-eureka-client:8762 - registration status: 204
204也就是說服務註冊完成
我們看看服務註冊中心的後臺效果
已經可以在裏面看到我們的客戶端信息了,大功告成
這是基本的eureka的服務端和客戶端的搭建,更高級的使用,請參考官方文檔。
小貼士
服務啓動後客戶端需要不停的向服務端發送心跳信息,每次發送完都會輸出一條日誌,如下
com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver - Resolving eureka endpoints via configuration
重複輸出是很煩人的,對於判斷服務的狀態我們可以通過服務註冊中心後臺查詢,這裏爲了避免輸出我們可以在配置文件中加上以下配置
客戶端加上
logging:
level:
com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver: WARN
服務端加上
logging:
level:
com.netflix: warn