1.引言
什么是Ribbon
- Ribbon是Netflix公司的一个负载均衡项目,可以在进行服务调用时做负载均衡;
2.Ribbon基本使用
Ribbon结合Http
Ribbon通常和Http请求结合,对Http请求进行负载均衡;最简单的使用如下,通过注入RestTemplate,并且打上@LoadBlanced注解,即可得到一个带有负载均衡效果的RestTemplate
@Configurationpublic class HttpConfiguration { @Bean @LoadBalanced public RestTempttpTlate restTemplate() { return new RestTemplate(); }}
使用时,只需要把RestTemplate发送请求时的URL中的主机名host替换为服务提供方的名字;那么在调用时,就会自动进行负载均衡
@RestControllerpublic 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