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. [转载] PHP开发必看 编程十大好习惯

    适当抽象 但是在抽象的时候,要避免不合理的抽象,有时也可能造成过渡设计,现在只需要一种螺丝刀,但你却把更多类型的螺丝刀都做出来了(而且还是瑞士军刀的样子..): 一致性 团队开发中,可能每个人的编程风 ...

  2. Android 利用cursor来进行排序(转至http://blog.csdn.net/yangzongquan/article/details/6547860)

    主要思路是:override move系列的方法,让cursor以自己想要的顺序来移动,从而达到对cursor排序的目的.比如数组A0里有 4(0),3(1),1(2),2(3),括号内为位置,排序后 ...

  3. asp.net mvc中用angularJs写的增删改查的demo。初学者,求指点。。

    直接给个代码下载链接.... http://pan.baidu.com/s/1FfVgq 本人刚刚学习angularJs,感觉双向数据绑定蛮爽的... 之前的代码存在点问题,已修复

  4. jpa动态分页查找

    https://my.oschina.net/buwei/blog/172402 http://www.cnblogs.com/derry9005/p/6282571.html http://2560 ...

  5. hadoop本地测试命令

    http://www.cnblogs.com/shishanyuan/p/4190403.html if have assign the /etc/profile: hadoop jar /usr/l ...

  6. linux环境,crontab报错Authentication token is no longer valid; new one required You (aimonitor) are not allowed to access to (crontab) because of pam configuration.

    问题描述: 今天同事反应,一个系统上的某些数据没有生成,看了下,怀疑定时任务没有执行,就看下了crontab,发现报了下面的错误: [aimonitor@4A-LF-w08 ~]$ crontab - ...

  7. mysql数据库中,通过一条insert into语句,同时插入多个值

    需求描述: 今天在看一本mysql的书籍,发现一个mysql中insert into好用的技巧,就是通过 1条insert into语句,插入多行数据,而不是多个insert into语句.在此记录下 ...

  8. python--list和tuple类型--2

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 一.创建list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以 ...

  9. 工作流JBPM_day02:3-预定义的活动1_4-预定义的活动2+在图片上高亮显示正在执行的上活动

    工作流JBPM_day02:3-预定义的活动1 工作流JBPM_day02:4-预定义的活动2+在图片上高亮显示正在执行的上活动 活动 Activity 预先定义好的活动 Start开始活动 End结 ...

  10. 给IT同学推荐这15个不错的学习网站,收藏起来慢慢看吧

    1.学堂在线:http://www.xuetangx.com 目前,学堂在线运行了包括包括清华大学.北京大学.复旦大学.斯坦福大学.麻省理工学院.加州大学伯克利分校等国内外几十所顶尖高校的优质课程.在 ...