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

相关推荐
LuminousCPP13 小时前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
章老师说13 小时前
BFE v1.8.6 正式发布:AI 网关计费精细化、Claude 协议与会话亲和性升级
运维·人工智能·ai·负载均衡·ai-native
一条破秋裤15 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
YOU OU16 小时前
优雅实现远程调用-OpenFeign
spring cloud
YOU OU16 小时前
Spring Cloud概述
后端·spring·spring cloud
kyrie_sakura17 小时前
python学习笔记11 -- 进程和线程
笔记·python·学习
自小吃多17 小时前
PCB Editor软件差分对添加与设置笔记
笔记·嵌入式硬件
Capricorn198818 小时前
防编造架构实战:对比 Gemini Notebook 解析知芽 Notebook Skill 的工程实现
人工智能·笔记·elasticsearch·架构·知识图谱·论文笔记
Shell运维手记19 小时前
Linux mdadm 软 RAID + LVM 完整综合笔记
linux·运维·笔记·5g
疯狂打码的少年19 小时前
【数据库技术】SQL数据查询(SELECT基本语法)
数据库·笔记·sql·oracle