SpringCloud註冊中心高可用搭建

Spring Cloud的註冊中心能夠由Eureka、Consul、Zookeeper、ETCD等來實現,這裏推薦使用Spring Cloud Eureka來實現註冊中心,它基於Netfilix的Eureka作了二次封裝,完成分佈式服務中服務治理的功能,微服務系統中的服務註冊與發現都經過這個註冊中心來進行管理。spring

引入Eureka Server依賴

以前的文章基礎上加入Spring Cloud的依賴,如今再加入註冊中心Eureka Server的依賴。服務器

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka-server</artifactId>
	</dependency>
</dependencies>

添加啓動類,開啓Eureka Server功能

在包根目錄下加入啓動類:微信

@EnableEurekaServer
@SpringBootApplication
public class RegisterApplication {

	public static void main(String[] args) {
		new SpringApplicationBuilder(RegisterApplication.class).bannerMode(Banner.Mode.LOG)
				.run(args);
	}
}

@EnableEurekaServer註解即開啓註冊中心服務器的功能。網絡

添加Eureka配置

在application.yml中加入以下配置:app

spring: 
  application: 
    name: register-center
  profiles: 
    active: register-center1
    
eureka:
  instance: 
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
    lease-expiration-duration-in-seconds: ${lease-expiration-duration-in-seconds}
    lease-renewal-interval-in-seconds: ${lease-renewal-interval-in-seconds}
  server: 
    enable-self-preservation: ${enable-self-preservation}  
    eviction-interval-timer-in-ms: ${eviction-interval-timer-in-ms}
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl: 
      defaultZone: ${register-center.urls}
      
---  
spring: 
  profiles: register-center1
      
server: 
  port: ${register-center1.server.port}
      
---
spring: 
  profiles: register-center2
  
server: 
  port: ${register-center2.server.port}

這裏作了兩臺註冊中心的高可用配置register-center1,register-center2,也能夠作多臺,既然是高可用,每一個註冊中心都向別的註冊中心註冊本身。maven

Maven filter配置

${}裏面的配置由maven resource filter來打包進行控制,不一樣的環境使用不一樣的配置文件。分佈式

如filter-dev.properties的配置參考以下:spring-boot

#url
register-center1.server.ip=192.168.1.22
register-center2.server.ip=192.168.1.23
register-center.urls=http://${register-center1.server.ip}:${register-center1.server.port}/eureka/,http://${register-center2.server.ip}:${register-center2.server.port}/eureka/

#port
register-center1.server.port=7001
register-center2.server.port=7002
      
#config
enable-self-preservation=false
eviction-interval-timer-in-ms=5000
lease-expiration-duration-in-seconds=20
lease-renewal-interval-in-seconds=6

Spring Cloud配置詳解

Spring Boot的配置參考Spring Boot系列文章,這裏只對Spring Cloud用到的配置解釋。微服務

spring.application.name:配置應用名稱,在註冊中心中顯示的服務註冊名稱。fetch

spring.cloud.client.ipAddress:獲取客戶端的IP地址。

eureka.instance.prefer-ip-address:配置爲true爲喜歡IP,即鏈接註冊中心使用IP地址形式,也可使用HOSTNAME,但生產環境不推薦。

eureka.instance.instance-id:配置在註冊中心註冊的惟一實例ID。

eureka.instance.lease-expiration-duration-in-seconds:指示eureka服務器在接收到最後一個心跳以後等待的時間(秒),而後才能今後視圖中刪除此實例,並禁止此實例的流量。將此值設置得太長可能意味着流量能夠路由到實例,即便實例不存在。設置此值過小可能意味着,因爲臨時網絡故障,實例可能會被取消流量。此值將設置爲至少高於lease-renewal-interval-in-seconds中指定的值。

eureka.instance.lease-renewal-interval-in-seconds:指示eureka客戶端須要向eureka服務器發送心跳以指示它仍然存在的頻率(以秒爲單位)。若是在lease-expiration-duration-in-seconds中指定的時間段內未收到心跳線,則eureka服務器將從其視圖中刪除該實例,所以不容許此實例的流量。請注意,若是該實例實現HealthCheckCallback,而後決定使其自己不可用,則該實例仍然可能沒法訪問流量。

eureka.server.enable-self-preservation:配置註冊中心是否開啓服務的自我保護功能。

eureka.server.eviction-interval-timer-in-ms:配置註冊中心清理無效節點的時間間隔,默認60000毫秒,即60秒。

eureka.client.register-with-eureka:配置爲true指示此實例將其信息註冊到eureka服務器以供其餘人發現。在某些狀況下,您不但願發現實例,而您只想發現其餘實例配置爲false。

eureka.client.fetch-registry:指示該客戶端是否應從eureka服務器獲取eureka註冊表信息。。

eureka.client.serviceUrl.defaultZone:Eureka服務器地址。

啓動註冊中心

這樣一個兩個註冊心的Eureka Server就搭好了,啓動的時候使用不一樣的Profile來指定不一樣的端口。

spring-boot:run -Drun.profiles=register-center1  -P dev
spring-boot:run -Drun.profiles=register-center2  -P dev

推薦:Spring Boot & Cloud 最強技術教程

掃描關注咱們的微信公衆號,乾貨天天更新。

image

相關文章
相關標籤/搜索