1.引言
什么是Ribbon
- Ribbon是Netflix公司的一个负载均衡项目,可以在进行服务调用时做负载均衡;
2.Ribbon基本使用
Ribbon结合Http
Ribbon通常和Http请求结合,对Http请求进行负载均衡;最简单的使用如下,通过注入RestTemplate,并且打上@LoadBlanced注解,即可得到一个带有负载均衡效果的RestTemplate
@Configuration
public class HttpConfiguration {
@Bean
@LoadBalanced
public RestTempttpTlate restTemplate() {
return new RestTemplate();
}
}
使用时,只需要把RestTemplate发送请求时的URL中的主机名host替换为服务提供方的名字;那么在调用时,就会自动进行负载均衡
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/test")
public String test() {
//HelloServiceProvider为服务提供方名称
return restTemplate.getForEntity("http://HelloServiceProvider/hello?info=okkk", String.class).getBody();
}
}
当然,这里还有配置好注册中心,将服务提供方和消费方都注册到注册中心上
3.Ribbon和RestTemplate整合原理
原理概述
for (String beanName : beanNames) {
Object singletonInstance = getSingleton(beanName);
if (singletonInstance instanceof SmartInitializingSingleton) {
final SmartInitializingSingleton smartSingleton = (SmartInitializingSingleton) singletonInstance;
if (System.getSecurityManager() != null) {
AccessController.doPrivileged((PrivilegedAction