Ribbon
Ribbon 是一个消费侧的负载均衡工具。
如何引入?
- 引入依赖
org.springframework.cloud:spring-cloud-starter-netflix-ribbon
。 - 使用
LoadBalancerClient
bean 操作。
@Service
public class SimpleOrderService {
@Resource
private LoadBalancerClient loadBalancerClient;
public String order(SString goodCode) {
ServiceInstance storeInstances = loadBalancerClient.choose("store");
String storeUrl = storeInstances.getUri().toString();
// dosth....
}
}
配置(以负载均衡规则为例)
- 高优先级:使用配置文件
application.properties
配置。
<clientName>.ribbon.NFLoadBalancerClassName=ILoadBalancer
<clientName>.ribbon.NFLoadBalancerRuleClassName=IRule
<clientName>.ribbon.NFLoadBalancerPingClassName=IPing
<clientName>.ribbon.NIWSServerListClassName=ServerList
<clientName>.ribbon.NIWSServerListFilterClassName=ServerListFilter
- 低优先级:使用
@RibbonClient
配置。
// 这个类不允许被 @ComponentScan 扫描到
@Configuration
public class PayLoadBalanceBeanConfig {
@Bean
public IRule payRule() {
return new MyRule();
}
}
@RibbonClient(name = "pay", configuration = PayLoadBalanceBeanConfig.class)
public class PayLoadBalanceConfig {
}
- 修改默认配置:使用
@RibbonClients
配置。
@RibbonClients(defaultConfiguration = LoadBalanceConfig.class)
public class LoadBalanceConfig {
@Bean
public IRule defaultRule() {
return new MyRule();
}
}
//TODO:经测试,方法2个方法三不能同时使用,会提示存在两个
IRule
。具体原因待探索。