Ribbon API
Ribbon 是一个独立的组件,是用来进行远程接口调用的
再config中直接代码配置,使用restTemplate,就可以进行远程调用
@Bean
//负载均衡注解
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
Ribbon配置
可以通过配置文件配置,也可以通过代码配置
如下一部分简单示例
# 关闭 ribbon 访问注册中心 Eureka Server 发现服务,但是服务依旧会注
册。
#true 使用 eureka false 不使用
ribbon.eureka.enabled=true
spring.cloud.loadbalancer.retry.enabled=true
# 指定调用的节点
micro-order.ribbon.listOfServers=localhost:8001
# 单位 ms , 请求连接超时时间
micro-order.ribbon.ConnectTimeout=1000
# 单位 ms , 请求处理的超时时间
micro-order.ribbon.ReadTimeout=2000
micro-order.ribbon.OkToRetryOnAllOperations=true
# 切换实例的重试次数
micro-order.ribbon.MaxAutoRetriesNextServer=2
# 对当前实例的重试次数 当 Eureka 中可以找到服务,但是服务连不上时将会
重试
micro-order.ribbon.MaxAutoRetries=2
micro-order.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
micro-order.ribbon.NFLoadBalancerPingClassName=com.netflix.loadbalancer.PingUrl
以上配置中 micro-order 是一个服务的名称,可以控制针对服务配置
也可以通过代码配置,一些简单示例
@Configuration
public class RibbonLoadBalanceMicroOrderConfig {
// @RibbonClientName
private String name = "micro-order";
@Bean
@ConditionalOnClass
public IClientConfig defaultClientConfigImpl() {
//配置属性都在DefaultClientConfigImpl中
DefaultClientConfigImpl config = new DefaultClientConfigImpl();
config.loadProperties(name);
config.set(CommonClientConfigKey.MaxAutoRetries,2);
config.set(CommonClientConfigKey.MaxAutoRetriesNextServer,2);
config.set(CommonClientConfigKey.ConnectTimeout,2000);
config.set(CommonClientConfigKey.ReadTimeout,4000);
config.set(CommonClientConfigKey.OkToRetryOnAllOperations,true);
return config;
}
/*不建议使用;判断服务是否存活,在调用前再ping,拉低性能
*/
// @Bean
public IPing iPing() {
//这个实现类会去调用服务来判断服务是否存活
return new PingUrl();
//默认 NOPing()
}
@Bean
public IRule ribbonRule() {
//线性轮训
new RoundRobinRule();
//可以重试的轮训
new RetryRule();
//根据运行情况来计算权重
new WeightedResponseTimeRule();
//过滤掉故障实例,选择请求数最小的实例
new BestAvailableRule();
return new RandomRule();
}
}
// 第二个类
/*
* 这个是针对 micro-order服务的 ribbon配置
* */
@Configuration
@RibbonClients(value = {
@RibbonClient(name = "micro-order",configuration = RibbonLoadBalanceMicroOrderConfig.class)
})
public class LoadBalanceConfig {
//...
}
上面配置还包括负载均衡算法等;
ribbon不依赖与spring-cloud