SpringCloud学习笔记:负载均衡Ribbon(3)
1. RestTemplate简介
RestTemplate是Spring Resource中一个访问第三方RESTful API接口的网络请求框架。
RestTemplate是用来消费REST服务的,RestTemplate的主要方法与RESTHTTP协议紧密关联。
HTTP:HEAD、GET、POST、PUT、DELETE和OPTIONS等
RestTemplate:headForHeaders()、getForObject()、postForObject()、put()和delete()等
2. Ribbon简介
负载均衡是指将负载分摊到各个执行单元上。
常见的负载均衡有两种方式:
(1)独立进程单元:通过负载均衡策略,将请求转发到各个不同的执行单元上。如:Nginx;
(2)将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了服务提供者的信息列表。通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
Ribbon是一个负载均衡组件,属于上述的第二种方式,将负载均衡逻辑封装在客户端中,并且运行在客户端的进程中。
在SpringCloud构建的微服务系统中,Ribbon作为服务消费者的负载均衡器,有两种使用方式:
(1)和RestTemplate相结合
(2)和Feign相结合
Feign默认集成了Ribbon。
Ribbon主要子模块:
◊ ribbon-core:ribbon项目核心,主要包括负载均衡器接口定义、客户端接口定义、内置发负载均衡实现等API;
◊ ribbon-eureka:为Eureka客户端提供负载均衡实现类;
◊ ribbon-httpclient:对Apache的HttpClient进行封装,提供包含负载均衡功能的REST客户端;
◊ ribbon-loadbalancer:独立使用或与其他模块一起使用负载均衡器API。
3. 使用RestTemplate和Ribbon消费服务

创建项目eureka-ribbon-client,通过RestTemplate来远程调用eureka-client服务API接口。
添加依赖spring-cloud-starter-ribbon
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>libing</groupId>
<artifactId>eureka-ribbon-client</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging> <name>eureka-ribbon-client</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>libing</groupId>
<artifactId>libing-eureka</artifactId>
<version>1.0.0</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> </project>
pom.xml
RestTemplate结合Ribbon开启负载均衡:
package libing.eurekaribbonclient.common; import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; @Configuration
public class RibbonConfig { @Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
} }
RibbonService使用restTemplate调用eureka-client的API接口:
package libing.eurekaribbonclient.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; @Service
public class RibbonService { @Autowired
RestTemplate restTemplate; public String getPort() {
return restTemplate.getForObject("http://eureka-client/helloworld", String.class);
} }
RibbonService
package libing.eurekaribbonclient.controller; import libing.eurekaribbonclient.service.RibbonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("ribbon")
public class RibbonController { @Autowired
RibbonService ribbonService; @GetMapping
public String getPort(){
return ribbonService.getPort();
} }
RibbonController
启动运行:
运行两个eureka-client实例


在浏览器中打开地址 http://localhost:8764/ribbon,交替显示:
port:8762
port:8763
4. LoadBalancerClient简介
负载均衡的核心类为LoadBalancerClient,LoadBalancerClient可以获取负载均衡的服务提供者的实例信息。
package libing.eurekaribbonclient.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("ribbon")
public class RibbonController { @Autowired
private LoadBalancerClient loadBalancer; @GetMapping
public String getPort() {
ServiceInstance instance = loadBalancer.choose("eureka-client");
return instance.getHost() + ":" + instance.getPort();
} }
LoadBalancerClient的choose("eureka-client")可以交替得到eureka-client的两个服务实例的信息。
负载均衡器LoadBalancerClient是从Eureka Client获取服务注册列表信息的,并将服务注册列表信息缓存一份。在LoadBalancerClient调用choose()方法时,根据负载均衡策略选择一个服务实例的信息,从而进行负载均衡。
SpringCloud学习笔记:负载均衡Ribbon(3)的更多相关文章
- 【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon
对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可 ...
- 【springcloud】客户端负载均衡(Ribbon)
转自:https://blog.csdn.net/pengjunlee/article/details/86594934 服务器端负载均衡负载均衡是我们处理高并发.缓解网络压力和进行服务器扩容的重要手 ...
- 五、springcloud之客户端负载均衡Ribbon
一.简介 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式: 一种是ribbon+restTemplate, ...
- SpringCloud学习笔记《---03 Ribbon Rule---》核心篇
- SpringCloud学习笔记(2):使用Ribbon负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...
- 学习一下 SpringCloud (三)-- 服务调用、负载均衡 Ribbon、OpenFeign
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解
前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...
- SpringCloud之实现客户端的负载均衡Ribbon(二)
一 Ribbon简介 Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为.为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务 ...
- SpringCloud 源码系列(4)—— 负载均衡 Ribbon
一.负载均衡 1.RestTemplate 在研究 eureka 源码上篇中,我们在 demo-consumer 消费者服务中定义了用 @LoadBalanced 标记的 RestTemplate,然 ...
- SpringCloud 源码系列(5)—— 负载均衡 Ribbon(下)
SpringCloud 源码系列(4)-- 负载均衡 Ribbon(上) SpringCloud 源码系列(5)-- 负载均衡 Ribbon(下) 五.Ribbon 核心接口 前面已经了解到 Ribb ...
随机推荐
- 手机端input[type=date]的placeholder不起作用
<div class="input clearfix"> <label class="fl">起始日期</label> &l ...
- 前端入门16-JavaScript进阶之EC和VO
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...
- HTML5跳转页面并传值以及localStorage的用法
1.首先,你得在那个页面把数据存入localStorage中吧.这个是必须的! localStorage.setItem("user",JSON.stringify(data.al ...
- CSS3 calc实现滚动条出现页面不跳动
什么是calc()? calc()从字面我们可以把他理解为一个函数function.其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度.比如说,你可 ...
- vuex2中使用mapGetters/mapActions报错解决方法
解决方案 可以安装整个stage2的预置器或者安装 Object Rest Operator 的babel插件 babel-plugin-transform-object-rest-spread . ...
- [总结]WEB前端开发常用的CSS/CSS3知识点
css3新单位vw.vh.vmin.vmax vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw; vmax: 相对于视窗的宽度或高度 ...
- 后端开发者的Vue学习之路(一)
目录 前言: iview组件库示例 element组件库示例 Vue的介绍 兼容性: 学习Vue需要的前置知识: MVVM模型 补充: 安装/导入 导入Vue 安装 两种方式的区别: HelloWor ...
- 支持JSP和Servlet的Web服务器
支持JSP和Servlet的Web服务器 1.Tomcat 服务器 目前非常流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型.轻量级的支持JSP和Servle ...
- rpc接口调用以太坊智能合约
rpc接口调用以太坊智能合约 传送门: 柏链项目学院 在以太坊摸爬滚打有些日子了,也遇到了各种各样的问题.这几天主要研究了一下如何通过rpc接口编译.部署和调用合约.也遇到了一些困难和问题,下面将 ...
- LeetCode算法题-Repeated String Match(Java实现)
这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...