Ribbon 客户端负载均衡-概述
Ribbon是Netflix提供的一个基于HTTP和TCP的客户端负载均衡器
客户端负载均衡-简化RestTemplate调用
使用Ribbon简化restTemplate使用
①在声明restTemplate时加@LoadBalanced
package com.ittest.consumer.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
②在使用restTemplate发请求时,定义url host:port替换为服务提供方的 应用名称
@GetMapping("/goods2/{id}")
public Goods findGoodsById2(@PathVariable("id") int id){
System.out.println("findGoodsById2..."+id);
String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;
// 3. 调用方法
Goods goods = restTemplate.getForObject(url, Goods.class);
return goods;
}
注意
一旦在加上@LoadBalanced注解后
restTemplate只能使用 服务名称 调用
1. Ribbon 客户端负载均衡- 演示
将下方红框里勾去掉,修改端口启动多个实例,访问Consumer,查看负载均衡效果
Ribbon 默认负载算法 轮询
2. Ribbon 客户端负载均衡-负载均衡策略
1、编码的方式设置复制均衡策略
①创建IRule规则类
package com.ittest.consumer.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyRule {
@Bean
public IRule rule(){
return new RandomRule();
}
}
②引导类开启
package com.ittest.consumer;
import com.ittest.consumer.config.MyRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.web.client.RestTemplate;
@EnableDiscoveryClient // 激活DiscoveryClient
@EnableEurekaClient
@SpringBootApplication
/**
* 配置负载均衡策略
* name 是服务提供方的应用名称
* configuration 负载均衡的实现bean
*/
@RibbonClient(name = "EUREKA-PROVIDER",configuration = MyRule.class)
public class ConsumerApp {
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class,args);
}
}
2、配置的方式实现负载策略
①配置文件
#配置的方式设置Ribbon负载均衡算法
EUREKA-PROVIDER:
ribbon:
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule