栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

负载均衡Ribbon

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

负载均衡Ribbon

文章目录
  • 前言
  • 一、Ribbon是什么?
  • 二、使用Ribbon实现负载均衡
      • 1.启动两个user-service实例
      • 2、开启负载均衡
      • 3、更换负载均衡策略


前言

在实际环境中,我们往往会开启很多个user-service的集群。此时我们获取的服务列表中就会有多个,到底该访
问哪一个呢?一般这种情况下我们就需要编写负载均衡算法,在多个实例列表中进行选择,不过Eureka中已经帮我们集成了负载均衡组件:Ribbon


一、Ribbon是什么?

Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为,为Rib。bon配置服务提供者地址列表后,Ribbon就可以基于负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等

二、使用Ribbon实现负载均衡 1.启动两个user-service实例

一个端口号为9091,另一个端口号为9092
在user-service的配置文件:

server:
  port: ${port:9091}      #如果port没有值,就默认为9091


2、开启负载均衡

因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。直接修改代码:
在RestTemplate的配置方法上添加 @LoadBalanced 注解

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
	return new RestTemplate();
}
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id) {
	String url = "http://user-service/user/" + id;
	return restTemplate.getForObject(url, User.class);
}

为什么只输入了service名称就可以访问了呢?而不需要获取ip和端口。
显然是有组件根据service名称,获取到了服务实例的ip和端口。因为 发送请求使用的是RestTemplate,spring使LoadBalancerInterceptor拦截器 ,这个类会在对RestTemplate的请求进行拦截,然后Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。

3、更换负载均衡策略

默认是轮询策略。SpringBoot也帮我们提供了修改负载均衡规则的配置入口:

user-service:
  ribbon:
    NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule

格式是: {服务名称}.ribbon.NFLoadBalancerRuleClassName ,值就是IRule的实现类。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298527.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号