ribbon官网:https://github.com/Netflix/ribbon
我们在Copy出来同一个服务的多个实例时,修改Name,然后还可以修改VM options的值,来修改服务(实例)端口。
VM options: -Dserver.port=8082
-D配置JVM参数
这样跟上一章中修改application.yml配置文件的端口号是一个效果
我们前面调用中 instances.get(0);(ConsumerController/queryById) 还是固定了写法,get(0),实际中我们要部署同一个服务的多个实例,
0、需求
实际环境中,我们往往会开启很多个user-service的集群。此时我们获取的服务列表中就会有多个,到底该访问哪一个呢?
一般这种情况下我们就需要编写负载均衡算法,在多个实例列表中进行选择。
不过Eureka中已经帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。
1、添加ribbon依赖
<!--负载均衡Ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2、添加@LoadBalanced注解
在启动类ConsumerAplication中的得到远程调用类的bean方法上添加注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
// Spring自带的RestTemplate ; 默认的RestTemplate,底层是走JDK的URLConnection方式。
return new RestTemplate();
}
3、用的时候直接写服务id,ribbon自动帮我们做负载均衡算法,看哪个服务最适合被调用,则调用她。(底层是拦截器,拦截一切RestTemplate请求)
String url = "http://user-service/user/"+id;
User user = restTemplate.getForObject(url,User.class);