本文是基於上一篇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版本進行設置。
Eureka
的Server
自帶集羣配置,只需要在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官方文檔