在之前,我使用ip+端口来访问服务提供者。但一般来说,在生产环境中,通常一个服务会有多个实例。那么服务消费者应该如何将请求分摊到多个服务提供者呢?

一、Ribbon

Ribbon是Netflix发布的负载均衡其。当我们为Ribbon配置服务提供者的地址列表后,Ribbon就可基于某种负载均衡的算法,自动帮助服务消费者请求。

二、Ribbon与Eureka配合使用

Riboon会自动从Eureka获取服务提供者的服务列表,然后通过负载均衡算法请求其中的一个实例。

三、整合Riboon

1、修改movie项目,由于已经介入了spring-cloud-starter-eureka包,不必再次引入Ribbon的包,Ribbon单独依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2、修改启动类,为RestTemplate添加注解

 @Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

3、修改controller,之前我们是使用ip+端口的方式进行访问的,这里将  ip+端口 改为我们要调动的微服务的serviceId,即服务提供者的spring.application.name字段,这样,Eureka会自动将虚拟主机名英社称微服务的网络地址。如果我们依然通过 ip+端口号 的方式进行访问,实际上我们只能访问其中的一个实例,并没有做到真正的负载均衡。

@RequestMapping(value = "/movie/findById", method = RequestMethod.GET)
public Map findById(Integer userId) {log.info("/movie/findById被访问,参数:userId=" + userId);/*ResponseEntity<HashMap> forEntity =this.restTemplate.getForEntity(findByUserIdUrl + userId, HashMap.class);*/return this.restTemplate.getForObject("http://user/user/getUserInfo?userId=" + userId, HashMap.class);}

此时启动movie和eureka项目,同时启动多个user项目

注册中心这里引入了两个user实例

此时访问 http://localhost:8020/movie/findById?userId=1,并且多次访问

获取到结果,说明访问成功。

再来看user的控制台:

另一台端口号为8011的服务也出现了同样的打印信息,说明Ribbon均匀的将请求分配到两个实例中,实现了负载均衡

转载于:https://blog.51cto.com/13593129/2398217

springCloud入门学习(六):使用Ribbon实现负载均衡相关推荐

  1. SpringCloud Hoxton版微服务- Ribbon实现负载均衡

    Ribbon实现负载均衡 Ribbon概念 一.Ribbon策略 二.配置使用 1.编写服务提供者 2.编写服务消费者 3.测试负载均衡随机策略 Ribbon概念 Spring Cloud Ribbo ...

  2. SpringCloud 入门教程(五): Ribbon实现客户端的负载均衡

    接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端 ...

  3. springCloud入门学习(七):通过属性自定义Ribbon配置

    很多场景下,可能需要根据自定义的Riboon的配置,例如修改ribbon的负载均衡规则等. 配置前缀是:<clientName>.ribbon. NFLoadBalancerClassNa ...

  4. Day2:SpringCloud入门学习——传智播客学习笔记【微服务电商】

    SpringCloud 0.学习目标 ·了解系统架构的演变 ·了解RPC与Http的区别 ·掌握HttpClient的简单使用 ·知道什么是SpringCloud ·独立搭建Eureka注册中心 ·独 ...

  5. 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)

    跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...

  6. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

  7. C语言程序设计入门学习六步曲,六步带你入门C语言

    C语言是面向过程的,而C++是面向对象的 C和C++的区别:         C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理 ...

  8. 【微服务架构】SpringCloud使用Ribbon实现负载均衡

    说在前面 软负载均衡的实现方式有两种,分别是服务端的负载均衡和客户端的负载均衡 服务端负载均衡:当浏览器向后台发出请求的时候,会首先向反向代理服务器发送请求,反向代理服务器会根据客户端部署的ip:po ...

  9. springcloud ribbon 配置负载均衡策略以及自定义策略

    一.系统内置的策略有以下几种.  这个负载策略配置说白了就是让 Ribbon 这个客户端负载均衡器怎么进行访问服务提供者列表.是轮流访问?随机访问?权重?等. Ribbon 的负载均衡策略 策略类   ...

  10. springcloud ribbon实现负载均衡的时候,提示Request URI does not contain a valid hostname: htt...

    qq社区:541122375,群名springClould全家桶 问题描述:  org.springframework.web.util.NestedServletException: Request ...

最新文章

  1. 在某些输入上删除IE10的“清除字段”X按钮?
  2. 关于for循环与setTimeout的延迟
  3. 做方差分析需要正态性检验吗_检验工序要做PFMEA吗?检验如何做PFMEA?
  4. c语言各种变量的优缺点,C语言优缺点
  5. SpringBoot系列六:SpringBoot整合Tomcat
  6. 我所想的GIX4的权限
  7. idea中push到github或gitee过程中的常见错误记录
  8. videojs暂停时显示大按钮_服务失败时进行故障恢复,Windows 7系统如何打开服务管理程序...
  9. 44.mysqlbinlog
  10. 操作系统课程设计报告(文件系统)
  11. VBA(比较全的api中文帮助文档例如office,excel,outlook,PowerPoint等api文档)
  12. vue中加载OCX控件(IE浏览器执行)
  13. 计算机控制液压同步顶升系统,PLC四点多点同步顶升系统,同步液压顶升系统
  14. android 金山电池医生,金山电池医生3.0(android版).PDF
  15. mysql创建视图并加注释_在mysql中为视图创建注释
  16. 关于UML中的Stereotype
  17. 1.3 guessing game
  18. python绘制缓和曲线_autocad绘制缓和曲线
  19. 肝了一个月,整理了一万道2020年最新Java面试题,阿里offer有了
  20. Eclipse ST-Link设置方法

热门文章

  1. 浅谈Socket编程
  2. iOS 加密的3种方法
  3. Java NIO系列教程(七) FileChannel
  4. int main(int argc,char* argv[])详解(原)
  5. 利用TcpClient TcpListener 实现发送图片
  6. 获取GridView隐藏列值
  7. 操作系统(Linux与Windows)的进程管理
  8. layUI 实现自定义弹窗
  9. Set_uid set_gid stick_bit 软链接 硬链接
  10. echo -e 参数