本文是基于上一篇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官方文档