Fork me on GitHub

具有负载均衡功能的RestTemplate

原文链接

通过@LoadBalanced和@Bean修饰可以生成一个具有负载均衡功能的RestTemplate。

1
2
3
4
5
6
7
8
@Configuration
public class MyConfiguration {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}

提示: 从Spring Boot 1.4开始不再提供自动配置的RestTemplate Bean,你必须自己创建。

Retrying Failed Requests

RestTemplatede的失败重试,默认是不可用的,如果需要开启,需要设置spring.cloud.loadbalancer.retry.enabled=true并且添加Spring Retry依赖。

1
2
3
4
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>

具有负载均衡功能的RestTemplate将遵循Ribbon关于重试的配置,如client.ribbon.MaxAutoRetriesclient.ribbon.MaxAutoRetriesNextServerclient.ribbon.OkToRetryOnAllOperationsRibbon具体的配置

Multiple RestTemplate objects

原文链接

如果需要同时使用具有负载均衡功能和普通的RestTemplate,可以如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Configuration
public class MyConfiguration {

@LoadBalanced
@Bean
RestTemplate loadBalanced() {
return new RestTemplate();
}

@Primary
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}

public class MyClass {
@Autowired
private RestTemplate restTemplate;

@Autowired
@LoadBalanced
private RestTemplate loadBalanced;

public String doOtherStuff() {
return loadBalanced.getForObject("http://stores/stores", String.class);
}

public String doStuff() {
return restTemplate.getForObject("http://example.com", String.class);
}
}

RestTemplate bean上的@Primary注解表明当@Autowired时没有特殊修饰符时使用该实例。

求鼓励,求支持!