java進階(2)之Eureka集羣配置以及Ribbon負載均衡淺析

本文是基於上一篇Euraka和Feign的結合使用來的,請先看下上一篇的內容。

Eureka集羣配置

先對eureka-feign進行build,生成jar在這裏插入圖片描述
然後在命令行的兩個窗口分別執行:

java12 -Dserver.port=8761 -Deureka.instance.hostname=peer1 -Deureka.server.responseCacheUpdateIntervalMs=3000 -Deureka.server.eviction-interval-timer-in-ms=3000 -Deureka.instance.leaseRenewalIntervalInSeconds=3 -Deureka.instance.leaseExpirationDurationInSeconds=9 -Deureka.client.service-url.defaultZone=http://peer2:8762/eureka/ -jar /Users/luoxiaohui/eureka-feign-demo/eureka-feign/target/eureka-feign-0.0.1-SNAPSHOT.jar
java12 -Dserver.port=8762 -Deureka.instance.hostname=peer2 -Deureka.server.responseCacheUpdateIntervalMs=3000 -Deureka.server.eviction-interval-timer-in-ms=3000 -Deureka.instance.leaseRenewalIntervalInSeconds=3 -Deureka.instance.leaseExpirationDurationInSeconds=9 -Deureka.client.service-url.defaultZone=http://peer1:8761/eureka/ -jar /Users/luoxiaohui/eureka-feign-demo/eureka-feign/target/eureka-feign-0.0.1-SNAPSHOT.jar

java12是我這邊java12版本的別名,讀者可以根據自己本地jdk版本進行設置。
EurekaServer自帶集羣配置,只需要在application.properties文件中將這兩個參數設置爲true:

#是否把自己註冊到Eureka
eureka.client.register-with-eureka=true
#是否從Eureka獲取註冊信息(單Eureka爲false)
eureka.client.fetch-registry=true

並對defaultZone進行互相註冊:

eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

在這裏插入圖片描述
在這裏插入圖片描述

Ribbon負載均衡

默認配置

ribbon也是netflix公司出品,主要用於對Eureka的負載均衡,默認的Ribbon參數如下:

Bean Type Bean Name Class Name
IClientConfig ribbonClientConfig DefaultClientConfigImpl
IRule ribbonRule ZoneAvoidanceRule
IPing ribbonPing DummyPing
ServerList ribbonServerList ConfigurationBasedServerList
ServerListFilter ribbonServerListFilter ZonePreferenceServerListFilter
ILoadBalancer ribbonLoadBalancer ZoneAwareLoadBalancer
ServerListUpdater ribbonServerListUpdater PollingServerListUpdater

默認配置均在org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration可找到。

自定義配置

@Configuration
@Import({ PropertyPlaceholderAutoConfiguration.class, ArchaiusAutoConfiguration.class,
		UtilAutoConfiguration.class, RibbonAutoConfiguration.class, HttpClientConfiguration.class })
// tag::sample_default_ribbon_config[]
@RibbonClients(defaultConfiguration = DefaultRibbonConfig.class)
public class RibbonClientDefaultConfigurationTestsConfig {

	public static class BazServiceList extends ConfigurationBasedServerList {
		public BazServiceList(IClientConfig config) {
			super.initWithNiwsConfig(config);
		}
	}
}
@Configuration
class DefaultRibbonConfig {
	@Bean
	public IRule ribbonRule() {
		return new BestAvailableRule();
	}
	@Bean
	public IPing ribbonPing() {
		return new PingUrl();
	}
	@Bean
	public ServerList<Server> ribbonServerList(IClientConfig config) {
		return new RibbonClientDefaultConfigurationTestsConfig.BazServiceList(config);
	}

	@Bean
	public ServerListSubsetFilter serverListFilter() {
		ServerListSubsetFilter filter = new ServerListSubsetFilter();
		return filter;
	}
}

自定義配置的測試代碼在org.springframework.cloud.netflix.ribbon.test.RibbonClientDefaultConfigurationTestsConfig可找到。

本人閱讀源碼能力有限,Eureka/Ribbon暫時告一段落,後續再啃!

參考文獻

eureka緩存細節以及生產環境的最佳配置
Ribbon實現客戶端側負載均衡-自定義Ribbon配置
Working with load balancers
spring-cloud-ribbon官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章