接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群。

很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改为8763。然后启动这两个Spring Boot应用, 就可以得到两个Hello World服务。这两个Hello world都注册到了eureka服务中心。这时候再访问http://localhost:8761, 可以看到两个hello world服务已经注册。(服务与注册参见Spring Cloud 入门教程(一): 服务注册)。

1.  客户端的负载均衡

负载均衡可分为服务端负载均衡和客户端负载均衡,服务端负载均衡完全由服务器处理,客户端不需要做任何事情。而客户端负载均衡技术,客户端需要维护一组服务器引用,每次客户端向服务端发请求的时候,会根据算法主动选中一个服务节点。常用的负载均衡算法有: Round Robbin,  Random,Hash,StaticWeighted等。

Spring 提供两辆种服务调度方式:Ribbon+restful和Feign。Ribbon就是一个基于客户端的负载均衡器, Ribbon提供了很多在HTTP和TCP客户端之上的控制.

Feign内部也已经使用了Ribbon, 所以只要使用了@FeignClient注解,那么这一章的内容也都是适用的。

下面就看看如何Spring Cloud如何用Ribbon来实现两个Hello World服务的负载均衡。以下是Spring cloud的ribbon客户端负载均衡架构图。

hello world服务和ribbon均注册到服务中心

service-hi工程跑了两个副本,端口分别为8762,8763,分别向服务注册中心注册, 当sercvice-ribbon通过restTemplate调用service-Hellowworld的接口时,利用用ribbon进行负载均衡,会轮流的调用处于两个不同端口的Hello world服务

 2. 创建一个Ribbon服务

1) 创建一个maven工程,取名叫service-ribbon, pom.xml文件如下:

 pom.xml

2). 创建主类ServiceRibbonApplication

 1 package springcloud.helloworld.ribbon.service;2 3 import org.springframework.boot.SpringApplication;4 import org.springframework.boot.autoconfigure.SpringBootApplication;5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;6 import org.springframework.cloud.client.loadbalancer.LoadBalanced;7 import org.springframework.context.annotation.Bean;8 import org.springframework.web.client.RestTemplate;9
10 @SpringBootApplication
11 @EnableDiscoveryClient
12 public class ServiceRibbonApplication {
13
14     public static void main(String[] args) {
15         SpringApplication.run(ServiceRibbonApplication.class, args);
16     }
17
18     @Bean
19     @LoadBalanced
20     RestTemplate restTemplate() {
21         return new RestTemplate();
22     }
23 }

@EnableDiscoveryClient向服务中心注册,并且注册了一个叫restTemplate的bean。

@ LoadBalanced注册表明,这个restRemplate是需要做负载均衡的。

3). 创建获取一个获取Hello内容的service类

 1 package springcloud.helloworld.ribbon.client;2 3 import org.springframework.beans.factory.annotation.Autowired;4 import org.springframework.stereotype.Service;5 import org.springframework.web.client.RestTemplate;6 7 @Service8 public class HelloService {9     @Autowired RestTemplate restTemplate;
10
11     public String getHelloContent() {
12         return restTemplate.getForObject("http://SERVICE-HELLOWORLD/",String.class);
13     }
14 }

这里关键代码就是, restTemplate.getForObject方法会通过ribbon负载均衡机制, 自动选择一个Hello word服务,

这里的URL是“http://SERVICE-HELLOWORLD/",其中的SERVICE-HELLOWORLD是Hello world服务的名字,而注册到服务中心的有两个SERVICE-HELLOWORLD。 所以,这个调用本质是ribbon-service作为客户端根据负载均衡算法自主选择了一个作为服务端的SERVICE-HELLOWORLD服务。然后再访问选中的SERVICE-HELLOWORLD来执行真正的Hello world调用。

3. 启动ribbon-service应用,我们就可以访问http://localhost:8901/, 然后每次刷新可以看到以下两种结果交替出现,表明实际调用的是在不同端口的不同的SERVICE-HELLOWORLD。

            

参考: http://blog.csdn.net/forezp/article/details/69788938

博客:http://www.cnblogs.com/chry/p/7263281.html

SpringCloud 入门教程(五): Ribbon实现客户端的负载均衡相关推荐

  1. SpringCloud系列七:使用Ribbon实现客户端侧负载均衡

    1. 回顾 在前面,已经实现了微服务的注册与发现.启动各个微服务时,Eureka Client会把自己的网络信息注册到Eureka Server上. 但是,在生成环境中,各个微服务都会部署多个实例,因 ...

  2. SpringCloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务

    首先简单解释一下什么是声明式实现? 要做一件事, 需要知道三个要素,where, what, how.即在哪里( where)用什么办法(how)做什么(what).什么时候做(when)我们纳入ho ...

  3. Scrapy爬虫入门教程五 Selectors(选择器)

    Scrapy爬虫入门教程一 安装和基本使用 Scrapy爬虫入门教程二 官方提供Demo Scrapy爬虫入门教程三 命令行工具介绍和示例 Scrapy爬虫入门教程四 Spider(爬虫) Scrap ...

  4. SpringCloud系列教程(五)之SpringCloud Gateway 网关聚合开发文档 swagger knife4j 和登录权限统一验证【Hoxton版】

    阅读提醒: 本文面向的是有一定springboot基础者 本次教程使用的Spring Cloud Hoxton RELEASE版本 由于knife4j比swagger更加友好,所以本文集成knife4 ...

  5. sql数据库教程百度云_绘画自学零基础入门教程|五天学会绘画pdf百度云下载!...

    绘画自学零基础入门教程|五天学会绘画pdf百度云下载!画画是可以让人留存记忆的事情.我自己就很喜欢画画来记录生活中一些特别的日子.场景还有我的家人朋友们.有时候,比照片更有故事感和纪念意义-有空拿出来 ...

  6. R语言七天入门教程五:认识并使用函数

    R语言七天入门教程五:认识并使用函数 一.什么是函数 在编程语言中,如果有一段代码需要在多次重复使用,除了复制粘贴外,还可以将其写成一个函数.函数可以很方便地实现代码复用,对于复杂的程序功能,可以将其 ...

  7. linux宝塔搭建网站,宝塔Linux面板搭建网站入门教程五(宝塔Linux面板安装WordPress博客程序)...

    本文于 2021-04-01 00:04 更新,本文內容具有時效性,如有失效,請在博客站內搜相關商家名稱,即可查看到關於此商家的最新優惠活動! 國外商家建議使用"谷歌瀏覽器"訪問, ...

  8. ribbon设置权重_Ribbon负载均衡策略配置

    在这里吐槽一句:网上很多文章真是神坑,你不看还好,看了只会问题越来越多,就连之前的问题都没有解决!!! 不多说了,Ribbon作为后端负载均衡器,比Nginx更注重的是请求分发而不是承担并发,可以直接 ...

  9. 服务器端的负载均衡和客户端的负载均衡

    负载均衡的概念:是指单台服务器性能达到极限时通过服务器集群来横向增加系统的吞吐量和性能. 想象一下,一群学生去食堂打饭,只安排一个阿姨负责分菜的话,效率太低了,阿姨可能会被累死.那么,就安排多个阿姨分 ...

最新文章

  1. 泛型擦除机制、自定义注解、代理、反射
  2. 递归与分治——二分查找算法(折半查找算法)
  3. MyReport报表引擎2.2.0.0新功能
  4. 使用静态工厂方法而不是构造器
  5. electronjs设置宽度_javascript – 如何使Electron WebView填充指定的大小?
  6. Redis和MySQL的结合方案
  7. 小米手机线刷教程详解
  8. Win To Go MacBook Pro (16-inch, 2019) Catalina 10.15.7 bootcamp 6.1.7748
  9. win10打开internet信息服务器,Win10打开internet信息服务的方法
  10. CCD实际尺寸对照表
  11. 如何购买一只好的基金
  12. 重做raid后,重启无法进入系统
  13. mxGraph Web在线绘图
  14. STM32与串口屏交互(USART HMI)
  15. 关于图像打印的思考.
  16. EMV技术学习和研究(三)应用初始化读应用数据
  17. switch()的参数注意项(转)
  18. addons软件下载_addons手机正版下载|
  19. ACM-ICPC 2018 焦作赛区网络预赛_J_ Participate in E-sports_Java大数开方
  20. 不是一番寒彻骨,哪得梅花扑鼻香

热门文章

  1. 自定义键盘码_无线+矮轴≤299?ikbc S200 2.4G 机械键盘测评
  2. 山东大学 2020级数据库系统 实验四
  3. mysql忘记i密码_Mysql忘记密码处理过程
  4. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解
  5. C++基础08-this指针-const修饰成员函数-函数返回引用/值
  6. opencv glob 内存溢出异常
  7. sudo apt-get常用命令
  8. docker占满linux磁盘根目录的解决办法
  9. openssl解析国密X509证书
  10. kcp-go源码解析