1.声明

当前内容基于上面的一个demo进行负载均衡优化(说白了就是优化获取访问的url)

上一个demo为:eureka的多个服务相互调用的demo

由于上一个demo中出现了重复,需要通过DiscoveryClient获取当前的一个需要调用的服务实例ServiceInstance,然后拼接url实现访问操作(这个操作是重复的,基本每个访问中都存在这个问题)

所以这里就看看spring的负载均衡都干了什么,并且查看如何实现的,优化了哪些东西

2.pom配置和部分App门面访问的优化

为目前的AppDemo中的pom文件添加负载均衡优化

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

为当前的RestTemplate的@Bean上面添加@LoadBalanced注解

 @AutowiredRestTemplate restTemplate;@Bean@LoadBalanced // 开启负载均衡public RestTemplate restTemplate() {return new RestTemplate();}

重写前面的getPermiss方法

@RequestMapping("getPermiss")public String getPermiss(String roleName) {System.out.println("访问App门面中通过角色名称获取用户权限");/** List<ServiceInstance> instances = client.getInstances("permiss" +* SUFIX_STRING); ServiceInstance serviceInstance = instances.get(0); String* string = serviceInstance.getUri().toString();*/ResponseEntity<String> postForEntity = restTemplate.getForEntity("http://permiss" + SUFIX_STRING + "/getPermissByRoleName?roleName={1}",String.class, roleName);String body = postForEntity.getBody();return body;}

3.测试getPermiss

发现照样访问成功!

4.分析RestTemplate都做了什么

1.查看控制台

DynamicServerListLoadBalancer for client permiss-service-provider initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=permiss-service-provider,current list of Servers=[localhost:2003],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] },Server stats: [[Server:localhost:2003; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@6694da5d

发现当前的RestTemplate还是自动获取了当前的ServiceInstance集合(主要通过permiss-service-provider,就是服务名称),然后通过负载均衡算法选出一个调用的url,最后通过url方式进行调用

2.查看这个RestTemplate中具有什么东西

发现这个类中有一个拦截器链

发现这个拦截器链中具有负载均衡拦截器

3.查看该注解的描述@LoadBalanced

Annotation to mark a RestTemplate bean to be configured to use a LoadBalancerClient

所以可以大胆的猜测,SpringCloud通过查看当前的@LoadBalanced方式为当前的RestTemplate的Bean注入LoadBalancerInterceptor拦截器,然后我们在调用的时候,通过这个拦截器进行分析操作,负载算法等一系列操作,最后找到需要调用的url,最后变成之前的操作,完成调用

5.总结

1.通过使用负载均衡后的RestTemplate,发现其优化了我们找到可以执行的url的地方,优化了我们大量的冗余代码

2.所谓的@LoadBalanced,其实就是为RestTemplate注入了一个负载均衡的拦截器,将所有操作进负载均衡操作(所以其他的也可以进行优化操作)

以上纯属个人见解,如有问题请联本人

Spring Cloud Netflix之为上一个damo添加Ribbon(负载均衡优化)相关推荐

  1. 《深入理解 Spring Cloud 与微服务构建》第七章 负载均衡 Ribbon

    <深入理解 Spring Cloud 与微服务构建>第七章 负载均衡 Ribbon 文章目录 <深入理解 Spring Cloud 与微服务构建>第七章 负载均衡 Ribbon ...

  2. Java学习笔记分享之Spring Cloud Netflix篇(上)

    Spring Cloud Netflix Spring Cloud 是什么 [百度百科]Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 ...

  3. Spring Cloud Netflix Zuul中的速率限制

    来源:SpringForAll社区 1.引言 Spring Cloud Netflix Zuul 是一个包含Netflix Zuul的开源网关.它为Spring Boot应用增加了一些特别的特性.不幸 ...

  4. Spring Cloud Netflix项目进入维护模式之我见

    这两天看到一则新闻:https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now#spring-cloud-ne ...

  5. 《Spring Cloud Netflix官方文档》2. 服务发现:Eureka服务器

    2. 服务发现:Eureka服务器 2.1 如何创建Eureka服务器 引用org.springframework.cloud的spring-cloud-starter-eureka-server就可 ...

  6. 《Spring Cloud Netflix官方文档》1.服务发现:Eureka客户端

    1.     服务发现:Eureka客户端 服务发现是微服务架构的关键原则之一.使用手动配置或一些约定方式来处理多服务多实例的方式是非常困难,并且十分脆弱的.Eureka同时是Netflix服务发现的 ...

  7. SpringCloud学习笔记(1)- Spring Cloud Netflix

    文章目录 SpringCloud学习笔记(1)- Spring Cloud Netflix 单体应用存在的问题 Spring Cloud Eureka Eureka Server代码实现 Eureka ...

  8. Spring Cloud Netflix尤里卡

    本教程是关于Spring云Netflix Eureka的. 在这里,我们将创建eureka发现服务器和微服务,这些服务本身将注册到发现服务器和使用netflix客户端API的客户端中,以使用示例示例来 ...

  9. Spring Cloud Netflix中文文档翻译笔记

    原文地址:http://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.2.2.RELEASE/ Spring Cloud Net ...

  10. spring cloud NetFlix 学习笔记

    spring cloud 1.前言 1.1. 概括 1.2 .常见面试题 2. 微服务概述 2.1 什么是微服务? 2.2 微服务与微服务架构 2.3 微服务优缺点 2.4 微服务技术栈有那些? 2. ...

最新文章

  1. 近期必读的5篇AI顶会CVPR 2020 GNN (图神经网络) 相关论文
  2. 帆软报表调用mysql存储过程_FineReport单行与数据库交互的方法
  3. python银行排队系统_socket实现银行排队系统
  4. 深入浅出数据仓库中SQL性能优化之Hive篇
  5. django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用
  6. snmp协议_软件评测师写作专栏之OSI七层模型及其常见的协议11
  7. 蓝桥杯单片机stc15f2k60s2 中断函数代码模板注释
  8. 3d激光雷达开发(lidar使用)
  9. python怎么定义一个变量为空列表_python – 为什么一个类变量没有在列表理解中定义,但另一个是?...
  10. LayaAr 批量加载资源 LoaderManager
  11. 【单目标优化求解】基于matlab混沌生物地理算法求解单目标问题【含Matlab源码 1411期】
  12. RMI、RPC、SOAP通信技术介绍及比对
  13. Linux 命令大全(超全实用型)
  14. kodi电视smb android,小米/天猫魔盒KODI(XBMC)SMB协议播放测试
  15. Vue 动态响应数据变化
  16. 微信公众号开发相关问题
  17. 众里寻她千百度,那人却在优衣库。
  18. 西门子S7-200 Smart PLC下载
  19. python 代码合并txt文件
  20. Python实现计算圆周率π的值到任意位的方法示例

热门文章

  1. JS将阿拉伯数字翻译成中文的大写数字、JS将数字转换为大写金额(整理)
  2. 2018杭州云栖大会免费送票啦!
  3. PHP上传视频到阿里云oss
  4. 她们不止“都挺好”自带”苏明玉“光环的美联人
  5. 台式计算机怎么开声音,台式机如何使用耳机说话
  6. 2021年展望Android原生开发的现状,真香!
  7. 来自H3C的降维打击:H3C BX54鲸路由评测体验
  8. bypy更换绑定的百度云盘账户
  9. 怎么注销百度云服务器账号,百度网盘怎么注销账号?账号注销方法一览
  10. 20190401每周精品之认知