当前位置: 首页 > news >正文

SpringCloud复习:(2)@LoadBalanced注解的工作原理

@LoadBalanced注解标记了一个RestTemplate或WebClient bean使用LoadBalancerClient来进行负载均衡。

LoadBalancerAutoConfiguration类给带注解的@RestTemplate添加了拦截器:LoadBalancerInterceptor.
具体流程如下:
首先定义一个LoadBalancerInterceptor
在这里插入图片描述
然后定义了一个RestTemplateCustomizer bean,这个bean 通过customize方法将传入的RestTemplate添加上边定义的LoadBalancerInterceptor,最后再定义一个SmartInitializingSingleton bean,容器创建时,会调用其afterSingletonsInstantiated方法,在这个方法里传入使用了@LoadBalanced注解标记的RestTemplate,然后调用上一步中的RestTemplateCustomizer的customize方法来给RestTemplate添加Interceptor.
在这里插入图片描述

总结: 通过@LoadBalanced注解,来判断哪些RestTemplate需要负载均衡功能。通过给RestTemplate添加拦截器来具体实现负载功能。

可以在方法中注入LoadBalancerClient,然后调用choose方法,来获取ServiceInstance对象,以进一步获取某个服务的信息,比如主机名、端口号等。
在这里插入图片描述

相关文章:

  • 初级前端面试题(一) 之 html/css/js
  • vue的双向绑定的原理,和angular的对比
  • AQS 为什么要使用双向链表?
  • Centos7 安装nvidia显卡驱动
  • 比较3个结构之间的关系
  • 2011-2021年“第四期”数字普惠金融指数与上市公司匹配(根据省份匹配)/上市公司数字金融指数匹配
  • WordPress主题模板 大前端D8 5.1版本完整开源版源码简洁大气多功能配置
  • Kotlin 使用@BindingAdapter编译出错
  • C++数据结构X篇_21_插入排序(稳定的排序)
  • WordPress(7)配置邮箱发送功能
  • C/S架构学习之使用epoll实现TCP特大型并发服务器
  • 【Java系列】LinkedList
  • requirements.txt用法你真的清楚吗
  • 1819_ChibiOS的互斥信号与条件变量
  • Idea Debug断点太多 启动太慢
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • ES6之路之模块详解
  • FineReport中如何实现自动滚屏效果
  • Git的一些常用操作
  • Java应用性能调优
  • MySQL数据库运维之数据恢复
  • SQLServer之创建数据库快照
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从重复到重用
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 浮现式设计
  • 复杂数据处理
  • 关于Java中分层中遇到的一些问题
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端js -- this指向总结。
  • 前端之Sass/Scss实战笔记
  • 前嗅ForeSpider采集配置界面介绍
  • 嵌入式文件系统
  • 手机端车牌号码键盘的vue组件
  • 微信支付JSAPI,实测!终极方案
  • 延迟脚本的方式
  • 原生Ajax
  • Android开发者必备:推荐一款助力开发的开源APP
  • Python 之网络式编程
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #define与typedef区别
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (JS基础)String 类型
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (一) springboot详细介绍
  • (转)为C# Windows服务添加安装程序
  • *1 计算机基础和操作系统基础及几大协议
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径