undefined## Spring Cloud Commons: Common Abstractions {#spring-cloud-commons-common-abstractions}
Patterns such as service discovery, load balancing and circuit breakers lend themselves to a common abstraction layer that can be consumed by all Spring Cloud clients, independent of the implementation (e.g. discovery via Eureka or Consul).
Spring RestTemplate as a Load Balancer Client
You can use Ribbon indirectly via an autoconfigured RestTemplate
when RestTemplate is on the classpath and a LoadBalancerClient
bean is defined):
public class MyClass {
@Autowired
private RestTemplate restTemplate;
public String doOtherStuff() {
String results = restTemplate.getForObject("http://stores/stores", String.class);
return results;
}
}
The URI needs to use a virtual host name (ie. service name, not a host name). The Ribbon client is used to create a full physical address. See RibbonAutoConfiguration for details of how the RestTemplate
is set up.
Multiple RestTemplate objects
If you want a RestTemplate
that is not load balanced, create a RestTemplate
bean and inject it as normal. To access the load balanced RestTemplate use the provided [[email protected]](/cdn-cgi/l/email-protection)
**Illegal HTML tag removed :** /* */
Qualifier
:
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);
}
}