码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 源码探索之@LoadBalanced注解工作原理


    源码探索之@LoadBalanced注解工作原理

    @LoadBalanced所在依赖包

    测试项目所用包spring-cloud-commons:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O71V3reP-1664418259269)(C:/Users/xwy/AppData/Roaming/Typora/typora-user-images/image-20220928155139897.png#pic_center)]

    @LoadBalanced源码

    @Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Qualifier
    public @interface LoadBalanced {
    
    }
    

    @LoadBalanced的使用

    在使用微服务框架时,通过ribbon实现多服务之间的负载均衡,需要对RestTemplatebean对象加上@LoadBalanced注解即可,如下:

    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }
    

    @LoadBalanced注解加上后有了什么变化?

    查找该注解的使用类,可以看到有2个

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3iYML4L-1664418206065)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220928155315791.png)]

    1.AsyncLoadBalancerAutoConfiguration类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DxF4ZtcK-1664418206068)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220928160147389.png)]

    2.LoadBalancerAutoConfiguration类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrejcMj0-1664418206069)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220928160134046.png)]

    可以看到,这2个负载均衡自动配置类有个明显的注解差别,配置类2的注解中多了一个@ConditionalOnClass(RestTemplate.class),该注解的意思是:当项目中有RestTemplate.class类时,该配置类才会生效!

    3.关注LoadBalancerAutoConfiguration类

    3.1代码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DbWlZSOu-1664418206071)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929094121509.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wK4iRQ5O-1664418206072)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929101509015.png)]

    标记1处,注入有@LoadBalanced注解的RestTemplatebean对象;

    标记2处,给RestTemplate注入拦截器loadBalancerInterceptor;

    标记4处,注入负载均衡实例。

    3.2拦截器loadBalancerInterceptor

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P3PytIzv-1664418206074)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929100326619.png)]

    标记3处,执行负载均衡对象请求服务实例的动作。

    Debug模式看看上述标记4处该负载均衡对象是哪个实例,如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kn6qIc0i-1664418206075)(C:\Users\xwy\AppData\Roaming\Typora\typora-user-images\image-20220929101344952.png)]

    可以看的是由Ribbon实现的负载均衡。

    总结

    1. 使用Ribbon做负载均衡,代码配置RestTemplate,并加上@LoadBalanced注解
    2. 被@LoadBalanced注解的RestTemplatebean对象被注入到LoadBalancerAutoConfiguration类管理
    3. LoadBalancerAutoConfiguration类给RestTemplate对象添加默认拦截器loadBalancerInterceptor
    4. 拦截器loadBalancerInterceptor用注入的Ribbon负载均衡客户端实例实现负载均衡
  • 相关阅读:
    取代 C++,Google 强势开源 Carbon语言
    ROS通信模块:秒懂话题通信
    算法 滑动窗口最大值-(双指针+队列)
    软件项目管理 8.2.软件项目质量活动
    JS(第二十四课)JS高级Es6语法
    C# 第五章『面向对象』◆第4节:析构函数destructor
    基于SSM微信小程序的邢台市域直通公交毕业设计-附源码211514
    链表删除重复的
    【数据处理】我这个后端要处理前端的问题,json字符串怎么传值??
    【笔记 Pytorch】模型网络结构、网络参数可视化
  • 原文地址:https://blog.csdn.net/qq_37279783/article/details/127085065
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号