1. Ribbon简介
2. 整合Ribbon
1. 添加依赖
2. 为RestTemolate添加@LoadBalanced注解
@Bean
@LoadBalanced
public RestTemplate getRestTemp() {
return new RestTemplate();
}
3. 使用RestTemplate
4. 查看当前使用的节点
3.自定义Ribbon配置
1. 代码自定义ribbon客户端
@Configuration
@RibbonClient(name = "server-user", configuration = FooConfiguration.class)
public class TestConfiguration {
}
FooConfiguration
必须是@Configuration
,但请注意,它不在主应用程序上下文的@ComponentScan
中,否则将由所有@RibbonClients
共享。如果您使用@ComponentScan
(或@SpringBootApplication
),则需要采取措施避免包含(例如将其放在一个单独的,不重叠的包中,或者指定要在@ComponentScan
)
Spring Cloud Netflix默认情况下为Ribbon(BeanType
beanName:ClassName
)提供以下bean:
IClientConfig
ribbonClientConfig:DefaultClientConfigImpl
IRule
ribbonRule:ZoneAvoidanceRule
IPing
ribbonPing:NoOpPing
ServerList<Server>
ribbonServerList:ConfigurationBasedServerList
ServerListFilter<Server>
ribbonServerListFilter:ZonePreferenceServerListFilter
ILoadBalancer
ribbonLoadBalancer:ZoneAwareLoadBalancer
ServerListUpdater
ribbonServerListUpdater:PollingServerListUpdater
创建一个类型的bean并将其放置在@RibbonClient
配置(例如上面的FooConfiguration
)中)允许您覆盖所描述的每个bean。例:
@Configuration
public class FooConfiguration {
@Bean
public IPing ribbonPing(IClientConfig config) {
return new PingUrl();
}
}
这用PingUrl
代替NoOpPing
。
2. 属性自定义ribbon客户端
支持的属性如下所示,应以<clientName>.ribbon.
为前缀:
NFLoadBalancerClassName
:应实施ILoadBalancer
NFLoadBalancerRuleClassName
:应实施IRule
NFLoadBalancerPingClassName
:应实施IPing
NIWSServerListClassName
:应实施ServerList
NIWSServerListFilterClassName
应实施ServerListFilter
注意
| 在这些属性中定义的类优先于使用@RibbonClient(configuration=MyRibbonConfig.class) 定义的bean和由Spring Cloud Netflix提供的默认值。 |
server-users:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule