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()方法时,根据负载均衡策略选择一个服务实例的信息,从而进行负载均衡。

  示例代码:libing-eureka-ribbon.zip

SpringCloud学习笔记:负载均衡Ribbon(3)的更多相关文章

  1. 【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon

    对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可 ...

  2. 【springcloud】客户端负载均衡(Ribbon)

    转自:https://blog.csdn.net/pengjunlee/article/details/86594934 服务器端负载均衡负载均衡是我们处理高并发.缓解网络压力和进行服务器扩容的重要手 ...

  3. 五、springcloud之客户端负载均衡Ribbon

    一.简介 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式: 一种是ribbon+restTemplate, ...

  4. SpringCloud学习笔记《---03 Ribbon Rule---》核心篇

  5. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  6. 学习一下 SpringCloud (三)-- 服务调用、负载均衡 Ribbon、OpenFeign

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  7. SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解

    前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...

  8. SpringCloud之实现客户端的负载均衡Ribbon(二)

    一 Ribbon简介 Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为.为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务 ...

  9. SpringCloud 源码系列(4)—— 负载均衡 Ribbon

    一.负载均衡 1.RestTemplate 在研究 eureka 源码上篇中,我们在 demo-consumer 消费者服务中定义了用 @LoadBalanced 标记的 RestTemplate,然 ...

  10. SpringCloud 源码系列(5)—— 负载均衡 Ribbon(下)

    SpringCloud 源码系列(4)-- 负载均衡 Ribbon(上) SpringCloud 源码系列(5)-- 负载均衡 Ribbon(下) 五.Ribbon 核心接口 前面已经了解到 Ribb ...

随机推荐

  1. 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍

    前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...

  2. js报错:Uncaught SyntaxError: Unexpected string

    一.问题 今天在写jsp页面时,发现加上某段代码后,页面的其它js就失效了,死活出不来,然后打开谷歌浏览器发现,页面js报如下错误: Uncaught SyntaxError: Unexpected ...

  3. python3.6 pip 出现locations that require TLS/SSL异常解决方案

    在给CentOS服务器安装完Python3.6后,使用pip命令出现问题,提示说无法找到ssl模块. 上网查询后发现在安装Python3.6时没有安装openssl-devel依赖库,解决方案如下: ...

  4. 2019年10个最受欢迎的JavaScript动画库!

    摘要: 非常炫酷的动画库! 原文:值得看看,2019 年 11 个受欢迎的 JavaScript 动画库! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 1. Three.js 超过 ...

  5. Axure rp8团队原型图开发

    说道原型图大家都不陌生,Axure rp作为这类工具可以说在网页布局的设计给开发人员提供了很大便利,目前我只熟悉过这一种,不知道小伙伴们有没有其他好用的工具推荐给大家用一下吗.好了,废话不多说,今天给 ...

  6. C#从SqlServer数据库读写文件源码

    如下的资料是关于C#从SqlServer数据库读写文件的内容,希望能对码农们有一些用. <%@ Page Language="C#" %> <script run ...

  7. IPD体系向敏捷开发模式转型实施成功的四个关键因素

    文/杨学明  集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Development)是当前国内外企业产品研发管理的最常用的3种模式.随着创新环境的快速发展,许多企业都会 ...

  8. jQuery如何制作动画

    下面为一组图片(四张)展示 1 2 3 4 页面代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  9. Kafka 安装配置 windows 下

    Kafka 安装配置 windows 下 标签(空格分隔): Kafka Kafka 内核部分需要安装jdk, zookeeper. 安装JDK 安装JDK就不需要讲解了,安装完配置下JAVA_HOM ...

  10. LeetCode算法题-Student Attendance Record I(Java实现)

    这是悦乐书的第258次更新,第271篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第125题(顺位题号是551).您将获得一个表示学生出勤记录的字符串. 该记录仅包含以下 ...