本文介绍了一些关于SpringCloud Ribbon的基本概念与应用。

Ribbon负载均衡流程

像这样的url:http://userservice/user/1 是没有办法通过http访问的,因为实际上不存在这么一个网站,因此Ribbon起到一个请求拦截处理的作用

  1. 收到请求后,向Eureka拉取服务

  2. 返回服务列表,进行负载均衡,轮询获取具体服务端口

具体操作需要在xxx-service模块中的xxxServiceApplication中将RestTemplate注入spring容器

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

Ribbon底层

  1. LoadBalancerInterceptor拦截http请求,将请求解析得到服务名称
  2. 将服务名称交给RibbonLoadBalancerClient
  3. RibbonLoadBalancerClient通过DynamicServerListLoadBalancer向eureka拉取服务列表
  4. DynamicServerListLoadBalancer通过负载均衡策略IRule从服务列表中进行选择,提交给RibbonLoadBalancerClient
  5. RibbonLoadBalancerClient对url进行修改,发起请求

负载均衡策略

image-20230830184232870.png

修改策略

  1. 通过在相关服务中将IRule注入spring容器实现对负载均衡策略的修改,例如xxx-service模块中的xxxServiceApplication中(本身也算是配置类)
@Bean
public IRule randomRule() {
return new RandomRule();
}
  1. 配置文件的方式,在xxx-service模块中的yml配置中添加
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.magus.config.RandomRule # 规则类的名称

饥饿加载

Ribbon默认是懒加载,第一次访问才会创建LoadBalancerClient,请求时间较长。使用饥饿加载可以在服务启动时就创建,减少请求时间

ribbon:
eager-load:
enabled: true
clients: userservice # 单个服务
clients: # 多个服务
- userservice
- orderservice