负载均衡 Ribbon 和 Feign
1. Ribbon 内容介绍
1.1 Ribbon 简介
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一R起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
1.2 客户端”负载均衡“和服务端“负载均衡”
我R们用一张图来描述一下这两者的区别
这篇文章里面不会去解释nginx,如果不知道是什么的话,可以先忽略, 先看看这张图,其中:
-
服务端的负载均衡是一个url先经过一个代理服务器(这里是nginx),然后通过这个代理服务器通过算法(轮询,随机,权重等等…)反向代理你的服务,来完成负载均衡
-
客户端的负载均衡则是一个请求在客户端的时候已经声明了要调用哪个服务,然后通过具体的负载均衡算法来完成负载均衡
1.3 Quick Start
首先,我们还是要引入依赖,但是,eureka已经把ribbon集成到他的依赖里面去了,所以这里不需要再引用ribbon的依赖,如图:
要使用ribbon,只需要一个注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
RestTemplate restTemplate = new RestTemplate();
return restTemplate;
}
在RestTemplate上面加入@LoadBalanced注解,这样子就已经有了负载均衡, 怎么来证明?
我们这里现在启动了eureka集群(3个eureka) 和Power集群(2个power) 和一个服务调用者(User)
但是我们的User仅仅只需要调用服务,不需要注册服务信息,所以需要改一下配置文件:
配置什么意思就不做过多解释了,上面讲eureka的时候有讲到过
server:
port: 5000
eureka:
client:
registerWithEureka: false
serviceUrl:
defaultZone: http://localhost:3000/eureka/,http://eureka3001.com:3001/eureka,http://eureka3002.com:3002/eureka
然后启动起来的页面是这样子的
我们能看见 微服务名:SERVER-POWER4 下面有2个微服务(power-4,power5),现在我们来通过微服务名调用这个服务
这是我们的user项目的调用代码 :
private static final String URL="http://SERVER-POWER4";
@Autowired //在配置类中配置的“RestTemplate”Bean
private RestTemplate restTemplate;
@RequestMapping("/power.do")
public Object power(){
//从SERVER-POWER4调用power.do服务
return restTemplate.getForObject(URL+"/power.do",Object.class)