Spring Cloud Ribbon负载均衡

 

一、简介

​ Spring Cloud Ribbon是一个基于HTTP 和 TCP的客户端负载工具,它基于Netflix Ribbon实现,我们可以使用它来进行远程服务负载均衡的调用。它不像Zuul 和 Eureka 等可以独立部署,它虽然是一个工具类框架,但是几乎所有的Spring Cloud微服务架构和基础设施都离不开它,包括后面所介绍的Feign 远程调用,也是基于Ribbon实现的工具

 

二、客户端负载均衡

​ 负载均衡是在一个架构中非常重要,而且不得不去实施的内容。因为负载均衡对系统的高可用,网络压力的缓解和处理能力扩容的重要手段之一。通常负载均衡分为两种:硬件负载均衡 和 软件负载均衡,硬件负载均衡一般是通过硬件来实现,在服务器节点之间安装特定的负载均衡设备,比如F5。 而软件负载均衡是采用软件控制的手段实现的,它实在服务器之间安装某种特定功能的软件来完成特定的请求分开工作,比如Nginx等。无论硬件负载还是软件负载,只要是服务端负载均衡都能以下图的架构方式构建起来:

 

 

​ 硬件负载均衡的设备和软件负载均衡的模块都会维护一个下挂可用的服务清单,通过心跳检测来剔除故障的服务节点以保证清单中都是可以访问的服务端节点。当客户发送请求到负载均衡的设备时。设备按照服务负载均衡的算法(随机访问,轮询访问,权重访问,最少访问次数算法)来找到对应的服务端。

​ 而客户端负载均衡和服务端负载均衡最大的不同点在于上面所提到服务清单的存储位置。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务清单,而这些服务清单都来自注册中心,比如我们上一章介绍的Eureka服务端。

​ 通过Spring Cloud Ribbon的封装,我们在微服务架构中使用负载均衡就比较简单,只需要下面两步:

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

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

 

三、RestTemplate详解

​ 在上一章中,我们已经引入了Spring Cloud Ribbon实现了客户端负载均衡的一个简单的实例,其中,我们使用了一个非常有用的对象RestTemplate。该对象会使用Ribbon的自动化配置,同时通过配置@LoadBalanced开启客户端负载均衡。下面我们将详细介绍RestTemplate 针对几种不同的请求类型和参数类型的服务调用实现。

准备工作

在上一篇博客中,我们搭建了一个注册中心,一个服务提供者,一个ribbon消费者客户端,现在我们也需要这三个组件来做Ribbon 服务消费

 

GET请求

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

第一种:getForEntity()函数,该方法返回的是ResponseEntity,该对象是Spring对HTTP请求响应的封装,其中主要存储了HTTP的几个重要元素,比如HTTP请求状态码的枚举对象HttpStatus(常用的404,500这些错误),在它的父类HttpEntity中还存储着HTTP请求的头信息对象HttpHeaders以及泛型类型集合的请求体对象。

它的一般形式有三种:

 
 

/* * url是远程服务端的路径,responseType是返回值类型,urlVariables是可变参数,给服务端传递的参数 */ getForEntity(String url, Class<T> responseType, Object... urlVariables) /* * 可以使用Map封装参数传递给客户端 */ getForEntity(String url, Class<T> responseType, Map<String, ?> urlVariables) /* * 也是一直接使用uri地址 */ getForEntity(URI url, Class<T> responseType) throws RestClientException /* * getForObject 用法和getForEntity基本相同 */ getForObject(String url, Class<T> responseType, Object... urlVariables) throws RestClientException getForObject(String url, Class<T> responseType, Map<String, ?> urlVariables) throws RestClientException getForObject(URI url, Class<T> responseType) throws RestClientException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值