1.依赖:nacos中包括了ribbon的依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
nacos服务业需要开启。
2.调用主程序
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
String url="ribbon-provider";
return restTemplate.getForObject("http://"+url+"/provider/getUserById/"+id,User.class);
}
3.application.yml
server: port: 8081 spring: cloud: nacos: discovery: server-addr: 192.168.83.131:8848 application: name: ribbon-provider
4.配置类:
@Configuration
public class BeanConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean
public IRule iRule(){
return new RandomRule();
}
@LoadBalanced:开启负载均衡
添加了@LoadBalanced注解之后,Ribbon会给restTemplate请求添加一个拦截器,在拦截器中获取注册中心的所有可用服务,通过获取到的服务信息(ip,port)替换 serviceId 实现负载请求。
RandomRule:负载均衡的策略:随机策略
RoundRobinRule:轮询策略
5.测试
ribbon可以让注册的服务名和ip:port端口对应:
经过ribbon的处理:http://ribbon-consumer/consumer等效于http://127.0.0.1:8080/consumer
轮询策略的结果。
6.异常处理:Ribbon:Request URI does not contain a valid hostname
注册的服务名不能带有下划线:否则会报异常。