负载均衡Ribbon

ribbon官网:https://github.com/Netflix/ribbon

我们在Copy出来同一个服务的多个实例时,修改Name,然后还可以修改VM options的值,来修改服务(实例)端口。

VM options: -Dserver.port=8082

-D配置JVM参数

VVKCXF.md.png

这样跟上一章中修改application.yml配置文件的端口号是一个效果

VVKim4.md.png
VVK96U.md.png


我们前面调用中 instances.get(0);(ConsumerController/queryById) 还是固定了写法,get(0),实际中我们要部署同一个服务的多个实例,

0、需求

实际环境中,我们往往会开启很多个user-service的集群。此时我们获取的服务列表中就会有多个,到底该访问哪一个呢?

一般这种情况下我们就需要编写负载均衡算法,在多个实例列表中进行选择。

不过Eureka中已经帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。

VVyjsS.png

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);

VVKplT.md.png

insist,on the road
-------------本文结束感谢您的阅读-------------