springcloud之註冊中心eureka
簡介
Spring Cloud是目前用於開發微服務的主流框架之一,我們都知道在微服務架構中最為基礎、核心的模組,就是服務註冊與發現。
在Spring Cloud裡我們可以使用它的Eureka模組來實現服務註冊與發現,Spring Cloud Eureka是基於Netflix Eureka做了二次封裝,它主要負責完成各個微服務例項的自動化註冊和發現功能。
Eureka包含兩個元件:Eureka Server和Eureka Client
Eureka Server提供服務註冊服務,各個節點啟動後,會在EurekaServer中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀的看到
EurekaClient是一個Java客戶端,用於簡化Eureka Server的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。在應用啟動後,將會向Eureka Server傳送心跳(預設週期為30秒)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,EurekaServer將會從服務登錄檔中把這個服務節點移除(預設90秒)
構建與部署
eureka server
1、單點部署 如果是idea,可以直接直接new project >> springinitializr >> cloud discovery
2、叢集部署 一般生產環境都是三個或以上節點,叢集中的每個節點也是把自己當一個提供者相互註冊 application.yml配置如下
server: port: 8761 spring: application: name: eureka profiles: active: dev security: basic: enabled: false # 啟用身份認證 user: name: lipeng # 定義使用者名稱 password: lipeng. # 定義密碼 --- spring: profiles: prd-1 eureka: instance: hostname: register1 client: fetch-registry: true register-with-eureka: true serviceUrl: defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/ instance: prefer-ip-address: true ip-address: 200.200.0.166 server: #配置屬性,但由於 Eureka 自我保護模式以及心跳週期長的原因,經常會遇到 Eureka Server 不剔除已關停的節點的問題 enable-self-preservation: false eviction-interval-timer-in-ms: 5000 --- spring: profiles: prd-2 eureka: instance: hostname: register2 client: fetch-registry: true register-with-eureka: true serviceUrl: defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/ instance: prefer-ip-address: true ip-address: 200.200.0.171 server: #配置屬性,但由於 Eureka 自我保護模式以及心跳週期長的原因,經常會遇到 Eureka Server 不剔除已關停的節點的問題 enable-self-preservation: false eviction-interval-timer-in-ms: 5000 --- spring: profiles: prd-3 eureka: instance: hostname: register3 client: fetch-registry: true register-with-eureka: true serviceUrl: defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/ instance: prefer-ip-address: true ip-address: 200.200.0.167 server: #配置屬性,但由於 Eureka 自我保護模式以及心跳週期長的原因,經常會遇到 Eureka Server 不剔除已關停的節點的問題 enable-self-preservation: false eviction-interval-timer-in-ms: 5000
打包後部署時在啟動命令中增加 --spring.profile.active=prd-1/prd-2/prd-3 啟動後如下: 這樣才算部署成功,如果上面兩個節點是在unavailable-replicas中則是沒有成功的。
k8s中整合eureka
一般是不建議在k8s中使用eureka,不過有時候如果需要的話,則部署時最好填寫域名。設定該變數就行
eureka client
這個就比較簡單了,網上有很多例子 pom依賴
<!--註冊中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
增加註解 yml配置
spring:
profiles: dev
eureka:
instance:
prefer-ip-address: true
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 20
hostname: ${spring.application.name}
client:
serviceUrl:
defaultZone: http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/,http://lipeng:[email protected]:8761/eureka/
registry-fetch-interval-seconds: 10
實際上defaultZone只需要配置一個節點,其他節點也會自動同步。 啟動服務就可以看到