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

LoadBalancer

一、手写随机负载均衡

    1、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!--引入nacos discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

    2、controller定义

@Resource
private RestTemplate restTemplate;@Resource
private DiscoveryClient discoveryClient;@RequestMapping("/restLoadbalance")
public String manualLoadBlance(){//1、获取order服务urlsList<ServiceInstance> instances = this.discoveryClient.getInstances("order");List<String> urls = instances.stream().map(instance->instance.getUri().toString()+"/order/query").collect(Collectors.toList());//2、随机负载请求int index = ThreadLocalRandom.current().nextInt(urls.size());return this.restTemplate.getForObject(urls.get(index),String.class);
}

二、LoadBalancer

      

    2.1、API

        (1)、引入依赖

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

        (2)、代码

//2、loadbalancer api
@Resource
private LoadBalancerClient loadBalancerClient;@RequestMapping("/loadbanlancerapi")
public String loadBanlancerApi(){ServiceInstance serviceInstance = this.loadBalancerClient.choose("order");return this.restTemplate.getForObject(serviceInstance.getUri().toString()+"/order/query",String.class);
}

    2.2、注解

        (1)、引入依赖   

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

       (2)、自定义@LoadBanlancer注解得RestTemplate

@Bean
@LoadBalanced   // 相当于为restTemplate整合了lb的能力
public RestTemplate restTemplateLoadBalancer(){return new RestTemplate();
}

        (3)、controller代码

@Resource
private RestTemplate restTemplateLoadBalancer;
@RequestMapping("/loadbanlanceraop")
public String loadBanlancerAop(){return this.restTemplateLoadBalancer.getForObject("http://order/order/query",String.class);
}

三、默认负载算法

    默认轮询负载:RoundRobinLoadBalancer

    更改默认负载算法:Cloud Native Applications

    (1)、自定义负载算法

public class CustomLoadBalancerConfiguration {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}
}

    (2)、启动类增加注解

@SpringBootApplication
@LoadBalancerClients(defaultConfiguration = CustomLoadBalancerConfiguration.class)
public class UserApplicaiton implements ApplicationRunner {
}

四、源码分析

    (1)、RestTemplate流程

    (2)、LoadBalancerClient#choose(String serviceId)

相关文章:

LoadBalancer

一、手写随机负载均衡 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><!--引入nacos discovery--> <dependency><groupId>com…...

【栈】Leetcode 71. 简化路径【中等】

简化路径 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 ‘/’ 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表示当前目录本身&am…...

简单操作一单利润500+,最新快手缺货赔付玩法,【找店教程+详细教程】

在如今快速变化的时代&#xff0c;寻找充满创新的收入来源已经成为了一种趋势。这不仅是为了实现财务的自由&#xff0c;更是为了在生活中拥有更多的选择权。一项革新的实践——利用手机进行快手缺货赔付单号的操作&#xff0c;已经成为许多人稳定“下车”的一个新途径。 据了…...

【软件设计师】先导

一、考试科目&#xff1a; 上午&#xff1a;计算机与软件工程知识&#xff0c;考试时间150min&#xff0c;75空单选题&#xff08;不一定一题一空&#xff09; 下午&#xff1a;软件设计&#xff0c;考试时间150分钟&#xff0c;问答题&#xff0c;6道只做5大题&#xff08;前四…...

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

提示&#xff1a;我解决这个bug跟别人思路可能不太一样&#xff0c;因为我是之前好用&#xff0c;换个项目就不好使了&#xff0c;倦了 文章目录 前言项目场景&#xff1a;解决方案&#xff1a;下载 nvm安装 nvm重新下载所需Node 版本nvm常用命令 前言 提示&#xff1a;这里可…...

如何用 MoonBit 实现 diff?

你使用过 Unix 下的小工具 diff 吗&#xff1f; 没有也没关系&#xff0c;简而言之&#xff0c;它是一个比对两个文本文件之间有什么不同之处的工具。它的作用不止于此&#xff0c;Unix 下还有一个叫 patch 的小工具。 时至今日&#xff0c;很少有人手动为某个软件包打补丁了…...

opencl色域变换,处理传递显存数据

在使用ffmpeg解码后的多路解码数据非常慢&#xff0c;还要给AI做行的加速方式是在显存处理数据&#xff0c;在视频拼接融合产品的产品与架构设计中&#xff0c;提出了比较可靠的方式是使用cuda&#xff0c;那么没有cuda的显卡如何处理呢 &#xff0c;比较好的方式是使用opencl来…...

COD论文笔记 Boundary-Guided Camouflaged Object Detection

动机 挑战性任务&#xff1a;伪装物体检测&#xff08;COD&#xff09;是一个重要且具有挑战性的任务&#xff0c;因为伪装物体往往与背景高度相似&#xff0c;使得准确识别和分割非常困难。现有方法的不足&#xff1a;现有的深度学习方法难以有效识别伪装物体的结构和细节&am…...

java内存模型介绍

Java内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是一种规范&#xff0c;它定义了Java虚拟机&#xff08;JVM&#xff09;如何在内存中存储和访问Java对象的方式&#xff0c;以及多个线程如何访问这些对象时的规则。它的主要目标是定义程序中的各个线程如…...

CSS语法介绍

文章目录 前言一、CSS引入方式1.行内操作2.内部操作3.外部操作 二、常用选择器1.标签选择器2.类选择器3.id选择器4.群组选择器5.后代选择器 三、字体常用设置1.字体类型2.字体大小3.字体样式4.字体粗细 四、div盒子模型1.盒子边框2.外边距3.内边距4.浮动 综合实战案例 前言 以…...

Jeecg | 完成配置后,如何启动整个项目?

前端启动步骤&#xff1a; 1. 以管理员身份打开控制台&#xff0c;切换到前端项目目录。 2. 输入 pnpm install 3. 输入 pnpm dev 4. 等待前端成功运行。 可以看到此时前端已经成功启动。 后端启动步骤&#xff1a; 1. 启动 mysql 服务器。 管理员身份打开控制台&#…...

Kubectl 的使用——k8s陈述式资源管理

一、kebuctl简介: kubectl 是官方的CLI命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver 能识别的信息&#xff0c;进而实现管理 k8s 各种资源的一种有效途径。 对资源的增、删、查操作比较方便&…...

多天线技术

多天线技术可以分为两类&#xff1a;分集技术和空间复用技术。分集技术利用多天线接收或者发射载有同一信息的信号&#xff0c;提高传输的可靠性。分集技术是将瑞利衰落无线信道换成更加稳定的信道。 发射端未知CSI时的信道容量 发射端已知CSI时的信道容量 信道估计&#xff…...

Meta发布Chameleon模型预览,挑战多模态AI前沿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

声压级越大,STIPA 越好,公共广播就越清晰吗?

在公共广播中&#xff0c;有些朋友经常问到是不是声压越大&#xff0c;广播清晰度就越高&#xff0c;下面我从搜集了一些专业技术资料&#xff0c;供大家参考。 一、声压级越大&#xff0c;STIPA 越好吗&#xff1f; 不完全是。最初&#xff0c;人们认为当声压级达到 60 dBA 以…...

基于springboot+vue的4S店车辆管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

深入理解 HTTP 缓存

浏览器缓存不是本地存储&#xff0c;要分清。浏览器缓存分为强缓存和协商缓存。本篇文章参考&#xff1a;使用 HTTP 缓存防止不必要的网络请求 讲解之前&#xff0c;我画了个简图来解释浏览器从缓存中获取资源的过程。 1. 强缓存 强缓存是浏览器缓存机制中的一种&#xff0c;…...

upload-labs 通关方法

目录 Less-1&#xff08;JS前端验证&#xff09; Less-2&#xff08;MIME验证&#xff09; Less-3&#xff08;黑名单&#xff0c;特殊过滤&#xff09; Less-4&#xff08;黑名单验证&#xff0c;.htaccess&#xff09; Less-5&#xff08;黑名单&#xff0c;点空格点绕过…...

5-26 Cpp学习笔记

1、如果子类实现了基类的函数&#xff0c;返回值、参数都相同&#xff0c;就覆盖了基类的函数。 2、使用作用域解析运算符来调用基类的函数。myDinner.Swim(); —— 调用子类的。myDinner.Fish::Swim(); —— 调用基类的(基类是Fish) 3、在子类中使用关键字using解除对Fish::…...

YOLOv8_pose的训练、验证、预测及导出[关键点检测实践篇]

1.关键点数据集划分和配置 从上面得到的数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的,代码如下: …...

终极Go性能优化工具gcvis:实时可视化GC跟踪数据完整指南

终极Go性能优化工具gcvis&#xff1a;实时可视化GC跟踪数据完整指南 【免费下载链接】gcvis Visualise Go program GC trace data in real time 项目地址: https://gitcode.com/gh_mirrors/gc/gcvis gcvis是一款专为Go语言开发者设计的实时垃圾回收可视化工具&#xff0…...

网盘下载速度太慢?这款直链解析工具让你下载效率提升250%!

网盘下载速度太慢&#xff1f;这款直链解析工具让你下载效率提升250%&#xff01; 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国…...

告别单调Sprite!在UE5 Niagara中玩转条带渲染器:从参数解析到动态颜色宽度控制

告别单调Sprite&#xff01;在UE5 Niagara中玩转条带渲染器&#xff1a;从参数解析到动态颜色宽度控制在虚幻引擎5的Niagara粒子系统中&#xff0c;条带渲染器&#xff08;Ribbon Renderer&#xff09;一直是被低估的利器。与常见的Sprite渲染器不同&#xff0c;它能够基于粒子…...

探索NHSE:动物森友会存档编辑器的7个隐藏技巧

探索NHSE&#xff1a;动物森友会存档编辑器的7个隐藏技巧 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾梦想在动物森友会中拥有无限资源&#xff1f;是否渴望打造完美岛屿却受限于游戏机…...

智慧树自动刷课插件:3步安装指南,彻底解放学习时间

智慧树自动刷课插件&#xff1a;3步安装指南&#xff0c;彻底解放学习时间 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台重复性的视频学习任务而烦恼…...

别再让Ubuntu22.04时间错乱了!用hwclock和timedatectl搞定硬件时钟时区的保姆级教程

彻底解决Ubuntu 22.04时间同步问题&#xff1a;硬件时钟与时区管理权威指南你是否曾在双系统切换后发现Ubuntu显示的时间比实际快了8小时&#xff1f;或者每次重启后系统时间都会"跳票"&#xff1f;这些看似小问题背后&#xff0c;隐藏着操作系统与硬件时钟&#xff…...

海外试玩推广渠道汇总

试玩英文名&#xff1a;playable&#xff0c;也叫互动广告&#xff0c;自2017年渐渐进入广告的视线。 与常规的视频广告不同&#xff0c;可试玩广告为用户提供了游戏玩法的片段&#xff0c;是用户与之自愿互动的广告单元&#xff0c;还原游戏原貌&#xff0c;并给用户一个身临…...

2026-05-24 GitHub 热点项目精选

/* 全局样式 */* { margin: 0; padding: 0; box-sizing: border-box; }body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;max-width: 900px; margin: 0 auto; padding: 30px 20px; line-height: 1.7; color: #2d3748;backgro…...

耦合振荡器模型在MPI并行计算同步分析中的应用

1. 耦合振荡器系统概述耦合振荡器模型为理解复杂系统中的同步行为提供了强有力的数学框架。在分布式计算领域&#xff0c;特别是MPI&#xff08;Message Passing Interface&#xff09;并行程序中&#xff0c;这种模型能够精确刻画计算节点间的动态交互过程。每个计算进程可视为…...

EasyDoc深度解析:如何将PDF、Word文档智能转换为JSON格式的终极指南

EasyDoc深度解析&#xff1a;如何将PDF、Word文档智能转换为JSON格式的终极指南 【免费下载链接】easydoc 项目地址: https://gitcode.com/gh_mirrors/easy/easydoc 在当今AI驱动的时代&#xff0c;处理文档数据变得前所未有的重要。EasyDoc作为一款强大的多模态文档处…...