Spring Cloud 客服端负载均衡 Ribbon
来源:互联网 发布:数据库开发 编辑:程序博客网 时间:2024/05/21 07:59
/**
* Auto configuration for Ribbon (client side load balancing).
*
* @author Spencer Gibb
* @author Dave Syer
* @author Will Tran
*/
@Configuration
@ConditionalOnClass
(RestTemplate.
class
)
//条件 : RestTemplate必须在工程的类路径下
@ConditionalOnBean
(LoadBalancerClient.
class
)
//条件: Spring 容器中必须包含LoadBalancerClient的实现,即RibbonLoadBalancerClient
@EnableConfigurationProperties
(LoadBalancerRetryProperties.
class
)
//启动重试功能,可以spring.cloud.loadbalancer.retry=false,取消重试,默认参数为true
public
class
LoadBalancerAutoConfiguration {
@LoadBalanced
@Autowired
(required =
false
)
private
List<RestTemplate> restTemplates = Collections.emptyList();
//维护一个RestTemplate列表,通过LoadBalanced来注解。
@Bean
public
SmartInitializingSingleton loadBalancedRestTemplateInitializer(
//加载初始话自定义的restTeplate,实质是初始化InterceptingHttpAccessor具体调用
final
List<RestTemplateCustomizer> customizers) {
return
new
SmartInitializingSingleton() {
@Override
public
void
afterSingletonsInstantiated() {
for
(RestTemplate restTemplate : LoadBalancerAutoConfiguration.
this
.restTemplates) {
for
(RestTemplateCustomizer customizer : customizers) {
customizer.customize(restTemplate);
}
}
}
};
}
@Autowired
(required =
false
)
private
List<LoadBalancerRequestTransformer> transformers = Collections.emptyList();
@Bean
@ConditionalOnMissingBean
public
LoadBalancerRequestFactory loadBalancerRequestFactory(
LoadBalancerClient loadBalancerClient) {
return
new
LoadBalancerRequestFactory(loadBalancerClient, transformers);
}
@Configuration
@ConditionalOnMissingClass
(
"org.springframework.retry.support.RetryTemplate"
)
static
class
LoadBalancerInterceptorConfig {
@Bean
public
LoadBalancerInterceptor ribbonInterceptor(
LoadBalancerClient loadBalancerClient,
LoadBalancerRequestFactory requestFactory) {
return
new
LoadBalancerInterceptor(loadBalancerClient, requestFactory);
}
@Bean
@ConditionalOnMissingBean
public
RestTemplateCustomizer restTemplateCustomizer(
final
LoadBalancerInterceptor loadBalancerInterceptor) {
return
new
RestTemplateCustomizer() {
@Override
public
void
customize(RestTemplate restTemplate) {
List<ClientHttpRequestInterceptor> list =
new
ArrayList<>(
restTemplate.getInterceptors());
list.add(loadBalancerInterceptor);
restTemplate.setInterceptors(list);
}
};
}
}
@Configuration
@ConditionalOnClass
(RetryTemplate.
class
)
static
class
RetryAutoConfiguration {
@Bean
public
RetryTemplate retryTemplate() {
RetryTemplate template =
new
RetryTemplate();
template.setThrowLastExceptionOnExhausted(
true
);
return
template;
}
@Bean
@ConditionalOnMissingBean
public
LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory() {
return
new
LoadBalancedRetryPolicyFactory.NeverRetryFactory();
}
@Bean
public
RetryLoadBalancerInterceptor ribbonInterceptor(
LoadBalancerClient loadBalancerClient, LoadBalancerRetryProperties properties,
LoadBalancedRetryPolicyFactory lbRetryPolicyFactory,
LoadBalancerRequestFactory requestFactory) {
return
new
RetryLoadBalancerInterceptor(loadBalancerClient, retryTemplate(), properties,
lbRetryPolicyFactory, requestFactory);
}
@Bean
@ConditionalOnMissingBean
public
RestTemplateCustomizer restTemplateCustomizer(
//自定义RestTemplate ,实质是初始化InterceptingHttpAccessor
final
RetryLoadBalancerInterceptor loadBalancerInterceptor) {
return
new
RestTemplateCustomizer() {
@Override
public
void
customize(RestTemplate restTemplate) {
List<ClientHttpRequestInterceptor> list =
new
ArrayList<>(
restTemplate.getInterceptors());
list.add(loadBalancerInterceptor);
restTemplate.setInterceptors(list);
}
};
}
}
}
阅读全文
0 0
- Spring Cloud 客服端负载均衡 Ribbon
- Spring Cloud 客服端负载均衡 Ribbon
- Spring Cloud -- Ribbon负载均衡
- Spring-Cloud 负载均衡 Ribbon
- 【Spring Cloud】Ribbon负载均衡
- spring cloud ribbon自定义负载均衡策略
- Spring Cloud Ribbon(负载均衡)
- spring-cloud-ribbon负载均衡(一)
- spring-cloud-ribbon负载均衡(二)
- 负载均衡之Spring Cloud Ribbon
- 三、Spring Cloud 的 Ribbon 负载均衡
- 客户端负载均衡 Spring Cloud Ribbon
- Spring Cloud学习--负载均衡(Ribbon)
- spring cloud Ribbon 2 (客户端负载均衡)
- spring cloud使用ribbon实现负载均衡
- 【Spring Cloud】--客户端负载均衡Spring Cloud Ribbon
- Spring Cloud Netflix负载均衡组件Ribbon介绍
- spring cloud中Ribbon自定义负载均衡策略
- Http服务器实现文件上传与下载(四)
- javahost:使用虚拟DNS省掉开发环境配置hosts文件
- 【泛型】Gson的序列化和反序列化
- 使用MYSQL实现Oracle的Start with...Connect By递归树查询
- 1186: 机器指令
- Spring Cloud 客服端负载均衡 Ribbon
- Kafka 设计与原理详解
- JavaScript学习笔记apply、call、bind用法说明
- Spring Cloud 声明式服务调用 Feign
- Spring Cloud 注册中心Eureka
- Python进阶
- Android 的Activity.getWindowManager().getDefaultDisplay().getWidth()过时了
- SSH原理记录
- PHP缓存 flush与ob_flush