SpringCloud---(5)Ribbon负载均衡

上一篇:SpringCloud—(4)Eureka与Zookeeper的区别

  Ribbon是基于Netfix Ribbon实现的一套客户端负载平衡器。

负载均衡

  说到负载均衡,可能会想到我们的Nginx负载均衡,其常见的负载均衡策略:

1.轮询(默认)
2.指定权重
3.ip_hash 根据ip分配
4.最少连接

负载均衡的作用就是将用户的访问请求有规律的分发到各个不同的服务上,避免出现某个服务器的压力过大,而某个服务器压力很小的情况。

  之前的负载均衡我们一般会使用Nginx来实现,Nginx与Ribbon之间还是有一定的区别:
在这里插入图片描述
上图是使用Nginx实现了一个负载均衡,它是在服务方和消费方之间使用了独立的负载均衡设施完成。而Ribbon实现负载均衡是将负载均衡逻辑集成到了消费方,由消费方从服务注册中心Eureka中获取到哪些地址可以使用,然后再从中选择一个合适的服务器。

项目中集成Ribbon

  因为Ribbon是从消费者(也就是客户端)实现负载均衡逻辑(Ribbon默认的负载均衡策略也是轮询),所以在使用Ribbon、配置Ribbon的时候我们应该是到Eureka的客户端项目上进行操作。

1.引入Ribbon依赖
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-ribbon</artifactId>
      <version>1.4.7.RELEASE</version>
    </dependency>

  事实上,SpringCloud项目中的eureka组件的依赖包含了ribbon。所以项目中只要引入了eureka依赖则ribbon组件不再需要单独引入依赖了。

2.添加注解@LoadBalanced

  因为SpringCloud使用的是基于HttpRest通信方式,所以会使用到RestTemplate,引入Ribbon的时候,直接在配置RestTemplate的类上添加注解@LoadBalanced就可以了

@Configuration
public class RestConfig {

	@Bean
	@LoadBalanced
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
}

  添加了@LoadBalanced注解之后,服务消费者就会按照Ribbon默认的轮询负载均衡策略选择合适的服务进行访问,负载均衡策略也可以自定义:

自定义负载均衡策略

  负载均衡策略有一个核心接口IRule,通过该接口可以实现自定义负载均衡策略
在这里插入图片描述
注意:如果需要自定义一个负载均衡策略MyRule,则该类不能在启动类Application所在统计目录下,否则会被@ComponentScan扫描到
在这里插入图片描述
  在Applicaiton外层创建自定义的负载均衡策略MyRule之后,需要在启动类添加注解@RibbonClient(name = "", configuration = MyRule.class)

name指定针对哪个服务 进行负载均衡,而configuration指定负载均衡的算法具体实现类。
在这里插入图片描述
自定义负载均衡策略可以仿照已有的策略进行修改,都需要继承AbstractLoadBalancerRule,然后在MyRule中就可以编写自己的负载均衡逻辑了。
在这里插入图片描述

下一篇:SpringCloud—(6)Feign调用服务

发布了79 篇原创文章 · 获赞 42 · 访问量 7913

猜你喜欢

转载自blog.csdn.net/qq_43655835/article/details/103803272
今日推荐