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

相关推荐
汇能感知3 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun3 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao3 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT4 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
ST.J4 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin5 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
fuyongliang1235 小时前
nginx反向代理,负载均衡,tomcat的数据流向图篇解析
nginx·tomcat·负载均衡
小憩-5 小时前
【机器学习】吴恩达机器学习笔记
人工智能·笔记·机器学习
UQI-LIUWJ6 小时前
unsloth笔记:运行&微调 gemma
人工智能·笔记·深度学习