SpringCloud:Ribbon

文章目录

Ribbon

ribbon是一个客户端负载均衡器,会从注册中心拉取可用服务,当客户端需要获取服务请求时,ribbon能够解析服务地址并实现负载均衡

快速入门

  1. 导入依赖
复制代码
>   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-ribbon</artifactId>
   </dependency>
  1. 为RestTemplate配置类添加注解
java 复制代码
@Bean
@LoadBalanced
 public RestTemplate restTemplate() {
 return new RestTemplate();
}
  1. 在服务类中发起请求
java 复制代码
@Service("orderService")
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
    @Autowired
    public  RestTemplate restTemplate;
    public Order getOrder(Long id){
        Order order = getById(id);
        User user = restTemplate.getForObject("http://user-service/user/" + order.getUserId(), User.class);
        order.setUser(user);
        return  order;
    }
}

其中"user-service"为微服务名称

Ribbon负载均衡算法

常见的负载均衡算法

  • 随机,通过随机选择服务进行执行,一般这种方式使用较少;
  • 轮训,负载均衡默认实现方式,请求来之后排队处理;
  • 加权轮训,通过对服务器性能的分型,给高配置,低负载的服务器分配更高的权重,均衡各个服务器的压力;
  • 地址Hash,通过客户端请求的地址的HASH值取模映射进行服务器调度。 ip hash
  • 最小连接数,即使请求均衡了,压力不一定会均衡,最小连接数法就是根据服务器的情况,比如请求积压数等参数,将请求分配到当前压力最小的服务器上。
  • 最小活跃数

更改算法规则

java 复制代码
public IRule ribbonRule() {
  return new NacosRandomWithWeightRule();
}

修改配置

yml 复制代码
\# 被调用的微服务名
user-service:
 ribbon:
  \# 自定义的负载均衡策略(基于随机&权重)
  NFLoadBalancerRuleClassName: com.tuling.mall.ribbondemo.rule.NacosRandomWithWeightRule

饥饿加载

Ribbon默认懒加载,意味着只有在发起调用的时候才会创建客户端。在进行服务调用的时候,如果网络情况不好,第一次调用会超时。

开启饥饿加载,解决第一次调用慢的问题:

yml 复制代码
ribbon:
 eager-load:
  \# 开启ribbon饥饿加载
  enabled: true
  \# 配置mall-user使用ribbon饥饿加载,多个使用逗号分隔
  clients: user-service
相关推荐
陈小桔5 分钟前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!6 分钟前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg367818 分钟前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July34 分钟前
Hikari连接池
java
微风粼粼1 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad1 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情6731 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术1 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
Olrookie2 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
倚栏听风雨3 小时前
java.lang.SecurityException异常
java