Ribbon实现客户端负载均衡

负载均衡:是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。

硬件负载均衡:主要通过在服务器节点之间安装专门用于负载均衡的设备;

软件负载均衡:通过在服务器上安装一些具有均衡负载功能或模块的软件来完成请求分发工作,比如Nginx。

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

通过Spring Cloud Ribbon的封装,在微服务架构中使用客户端负载均衡调用需要如下二步:

  1)服务提供者只需要启动多个服务实例并注册待一个注册中心或多个相关联的服务注册中心;

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

RestTemplate详解

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

  1)getForEntity函数:

    RestTemplate restTemplate = new RestTemplate();

    ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://USER_SERVICE/user?name={1}",String.class,"change1");

    String body = responseEntity.getBody();

    备注:最后一个参数“change1”会替换url中的{1}占位符;返回的ResponseEntity对象中的body内容类型会根据第二个参数转换为String类型。如果希望返回某个Object类型,则传Object.class。

  2)getForObject函数:对getForEntity的进一步封装,它通过HttpMessageConverterExtractor对HTTP的请求响应body内容进行对象转换,实现请求直接返回包装好的对象内容

    RestTemplate restTemplate = new RestTemplate();

    String result = restTemplate.getForObject(url,String.class);

    备注:result为body内容,String.class类型,如果body是一个User对象,则可以这样User result = restTemplate.getForObject(url,User.class);

POST请求:在RestTemplate中,对post请求可以通过如下三个方法进行调用实现

  1)postForEntity函数:

    RestTemplate restTemplate = new RestTemplate();

    User user = new User("didi",30);

    ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://USER_SERVICE/user",user,String.class);

    String body = responseRntity.getBody();

    备注:user为提交的body内容,String.class为请求响应返回的bod类型。

  2)postForObject函数:

    RestTemplate restTemplate = new RestTemplate();

    User user = new User("didi",30);

    String postResult = restTemplate.postForObject("http://USER_SERVICE/user",user,String.class);

  3)postForLocation函数:返回新资源的URI

    RestTemplate restTemplate = new RestTemplate();

    User user = new User("didi",30);

    URI responseURI = restTemplate.postForLocation("http://USER_SERVICE/user",user);

PUT请求:在RestTemplate中,对put请求可以通过put方法进行调用实现

  RestTemplate restTemplate = new RestTemplate();

  Long id = 10001L;

  User user = new User("didi",40);

  restTemplate.put("http://USER_SERVICE/user/{1}",user,id);

DELETE请求:在RestTemplate中,对DELETE请求可以通过delete方法进行调用实现 

  RestTemplate restTemplate = new RestTemplate();

  Long id = 10001L;

  restTemplate.delete("http://USER_SERVICE/user/{1}",user,id);

  

SpringCloud--Ribbon负载均衡的更多相关文章

  1. SpringCloud Ribbon 负载均衡 通过服务器名无法连接的神坑一个

    一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 java.net.UnknownHostException: SERVICE-HI java.lang.Ill ...

  2. SpringCloud系列——Ribbon 负载均衡

    前言 Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制.我们在上篇(猛戳:SpringCloud系列——Feign 服务调用)已经实现了多个服务之间的Feign调用 ...

  3. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

    1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...

  4. SpringCloud无废话入门02:Ribbon负载均衡

    1.白话负载均衡 在上一篇的介绍中,我们创建了两个一模一样的服务提供者:Provider1和Provider2,然后它们提供的服务也一模一样,都叫Hello-Service.为什么一样的服务我们要部署 ...

  5. spring-cloud: eureka之:ribbon负载均衡自定义配置(二)

    spring-cloud: eureka之:ribbon负载均衡自定义配置(二) 有默认配置的话基本上就是轮询接口,现在我们改用自定义配置,同时支持:轮询,随机接口读取 准备工作: 1.eureka服 ...

  6. spring-cloud: eureka之:ribbon负载均衡配置(一)

    spring-cloud: eureka之:ribbon负载均衡配置(一) 比如我有: 一个eureka服务:8761 两个user用户服务: 7900/7901端口 一个movie服务:8010 1 ...

  7. SpringCloud学习(4)——Ribbon负载均衡

    Ribbon概述 SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. 简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软 ...

  8. spring-cloud配置ribbon负载均衡

    spring-cloud配置ribbon负载均衡 ribbon提供的负载均衡就是开箱即用的,简单的不能再简单了 为了顺利演示此demo,你需要如下 需要提前配置eureka服务端,具体看 https: ...

  9. 浅谈SpringCloud (三) Ribbon负载均衡

    什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力. 我们 ...

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

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

随机推荐

  1. Incentivizing exploration in reinforcement learning with deep predictive models

    Stadie, Bradly C., Sergey Levine, and Pieter Abbeel. "Incentivizing exploration in reinforcemen ...

  2. tornado 重定向404

    方法一: 一度喜欢tornado的我, 一直在尝试寻找自定义404的方法,恰巧在看tornaod的mvc结构的时候看到了解决办法 方法之巧妙令人从心底佩服.后来我克隆一份到自己的github以作备份. ...

  3. e676. 把彩色图像转换为灰色

    ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorConvertOp op = new ColorConvertOp(c ...

  4. Hello World! 这是我的第一个 CGI 程序

    Hello World! 这是我的第一个 CGI 程序上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上.在这里,值得注意一点,第一行输出 Content-ty ...

  5. 【转载】ASP.NET Core 中间件详解及项目实战

    前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的Hello World,如果你觉得本篇文章 ...

  6. Android多线程任务的优化1:AsyncTask的缺陷 (转至 http://www.linuxidc.com/Linux/2011-09/43150.htm)

    导语:在开发Android应用的过程中,我们需要时刻注意保障应用的稳定性和界面响应性,因为不稳定或者响应速度慢的应用将会给用户带来非常差的交互体验.在越来越讲究用户体验的大环境下,用户也许会因为应用的 ...

  7. 一直误解的memset函数

    1.“想当然”导致的后果 今天犯了一个十分低级的错误,在对一个整型数组用memset进行初始化设置所有元素值为1.可是结果却大出所料,很意外啊!接着,我就做了代码测试. #include <io ...

  8. windows,cmd中进行盘符的切换

    需求描述: 在工作中,有的时候需要在cmd中进行盘符的切换,以前总有些时候 通过cd来切,就是切换不过去,每次都要进行百度查询,所以,这次就记录下, 留着以后再用. 操作过程: 1.通过win+r-& ...

  9. Mike Gancarz:Linux/Unix设计思想

           Mike Gancarz是一位技术布道者. 他是Linux/Unix最基本的倡导者之中的一个,也是最早开发X Window System的先驱.他把一些在Unix/Linux社区里口口相 ...

  10. redis安装之zmalloc.h:55:2: error: #error "Newer version of jemalloc required"错误

    redis是C语言编写的软件,安装前需要编译,需要gcc编译环境,确认安装gcc编译环境后(安装gcc命令:yum install gcc-c++) 在redis解压目录下,确认有Makefile文件 ...