客户端负载均衡Ribbon
简述
- Ribbon是一个工具类框架,不需要单独部署,实现了客户端的负载均衡,保证了系统服务的高可用。
- 默认实现了多种负载均衡策略(线性轮询,权重,流量负载等)和提供自定义策略的接口
- 整合eureka服务端来维护一份客户端的服务清单,用心跳机制来维护健康性
- 用RestTemplate HTTP客户端来发起请求
RestTemplate
快速实践
<T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables)
<T> T getForObject(String url, Class<T> responseType, Object... uriVariables)
//还支持 post put delete
相关优化
默认情况下RestTemplate没有使用相关链接池,
通过配置即可
@Configuration
public class ApplicationConfig {
//只需要基于接口org.springframework.http.client.ClientHttpRequestFactory 的实现都可以使用
@Bean
public RestTemplate restTemplate() {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal("通过配置获取", Integer.class, 10));
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient()));
return restTemplate;
}
}
重试机制
整合了Spring Retry来增强了 RestTemplate的重试机制,通过一些配置来实现重试策略
spring.cloud.loadbanlacer.retry.enable:开关,默认是关闭的
hystrix.command.default.execution.islocation.thread.timeoutInMilliseconds:这是断路器的时间 这个时间需要大于Ribbon的超时时间 不然白搭
ribbon.ReadTimeout 请求处理的超时时间
ribbon.ConnectTimeout 请求链接的超时时间
ribbon.MaxAutoRetries 当前实例的重试次数
ribbon.MaxAutoRetriesNextServer 最多切换多少次实例