Springcloud笔记(4)-客户端负载均衡Ribbon

Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,不需要独立部署,几乎存在于每一个springcloud构建的微服务和基础设施中。

微服务间调用,API网关的请求转发都通过Ribbon实现。

负载均衡

通常所说的负载均衡都是指的服务端负载均衡,包括硬件和软件,如软件的nginx。而ribbon是一个客户端负载均衡,客户端负载均衡中,所有客户端节点维护自己要访问的服务端清单,与服务注册中心配合完成。springcloud的服务治理框架,默认会整合ribbon,如Eureka。

在微服务架构中使用客户端负载均衡调用两步:

服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。

服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面服务的接口调用。

服务消费者的两个目标:发现服务和消费服务,发现服务由Eureka的客户端完成(通过@EnableDiscoveryClient注解让应用注册为Eureka客户端应用,获得服务发现能力),服务消费任务由ribbon完成(应用主类中创建RestTemplate的SpringBean实例,通过@LoadBalanced注解开启客户端负载均衡)

Eureka包含了ribbon,当ribbon与Eureka联合使用时,ribbon的服务实例清单会被扩展为从Eureka注册中心获取服务端列表。

还使用文章中的例子 Springcloud笔记(2)-Eureka服务注册中心-CSDN博客

服务消费

在 j-cloud-sonsumer的 HelloController.java代码

java 复制代码
@RestController
public class HelloController {

    @Bean
    @LoadBalanced
    public RestTemplate getResttemplate(){
        return new RestTemplate();
    }
    @Autowired
    private RestTemplate resttemplate;

    @RequestMapping("/hello")
    public String hello(){
        //指出服务地址   http://{服务提供者应用名名称}/{具体的controller}
        String url="http://provider-user/user/sayHello";

        //返回值类型和我们的业务返回值一致
        return resttemplate.getForObject(url, String.class);

    }
  
}

1、创建RestTemplate的Spring Bean实例,并通过@LoadBalanced注解开启客户端

负载均衡。

2、在接口实现中,调用RestTemplate创建的实例,使用getForObject方法实现对服务提供的/user/sayHello接口进行调用,可以看到这里的服务名为provider-user。

启动消费者访问查看控制台,Ribbon输出了当前客户端维护的provider-user的服务列表情况。其

中包含了各个实例的位置,Ribbo就是按照此信息进行轮询访问,以实现基于客户

端的负载均衡。另外还输出了一些其他非常有用的信息,如对各个实例的请求总数

量、第一次连接信息、上一次连接信息、总的请求失败数量等。

(使用ribbon来实现服务消费,ribbon对服务列表进行轮询,实现负载均衡)

RestTemplate

RestTemplate ,该对象会使用Ribbon的自动化配置,通过配置@LoadBanlanced开启客户端负载均衡。

在RestTemplate 中,对GET请求通过如下两个方法进行调用实现。

1)getForEntity

  1. getForObject

POST请求三个方法进行调用实现

1)postForEntity

  1. postForObject

  2. postForLocation

Ribbon支持的负载均衡策略

Ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为

com.netflix.loadbalancer.IRule

可以通过修改配置来调整Ribbon的负载均衡策略,具体代码如下

service-product: # 调用的提供者的名称

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

相关推荐
Heartache boy39 分钟前
野火STM32_HAL库版课程笔记-手动建立工程模板与CubeMX后续用法(重要)
笔记·stm32·单片机·嵌入式硬件
mysuking1 小时前
springboot与springcloud对应版本
java·spring boot·spring cloud
Ztopcloud极拓云视角5 小时前
Gemini 3.1 Pro vs GPT-5.4 Pro:API成本1/3、性能差多少?选型实测笔记
人工智能·笔记·gpt·ai·语言模型
鱼鳞_8 小时前
Java学习笔记_Day22
java·笔记·学习
她说..8 小时前
Java 注解核心面试题
java·spring boot·spring·spring cloud·自定义注解
自小吃多9 小时前
TMC220X芯片 串口工具连接交互
笔记·嵌入式硬件
ZhiqianXia9 小时前
PyTorch学习笔记(6) : torch.autograd
pytorch·笔记·学习
网络工程小王9 小时前
【提示词工程和思维链的讲解】学习笔记
人工智能·笔记·学习
后藤十八里9 小时前
极验4消消乐验证码逆向笔记
笔记·爬虫·python
圣光SG10 小时前
项目分析与程序设计 学习笔记
笔记·学习·学习笔记·程序设计·项目分析