【SpringCloud】LoadBalancer——服务调用与负载均衡

news/2024/12/2 16:10:03/文章来源:https://www.cnblogs.com/luyj00436/p/18580829

基本介绍

主要功能:LoadBlancer的主要作用就是提供客户端软件的负载均衡,然后由OpenFeign去调用具体的微服务。负载均衡的算法,分为轮询和随机

使用

场景: 订单模块的负载均衡。通过消费者模块,访问订单支付模块(子模块8001/8002/8003)

例子前提

  • 已经使用了注册服务中心(https://www.cnblogs.com/luyj00436/p/18576831),根据前面的例子,已经使用了Consul。
  • 已有订单支付模块,并且配置Consul服务。
  • 消费者模块,已引用订单支付模块。

步骤

1. 消费者服务模块添加负载均衡。因为spring-cloud-starter-consul-discovery 中已经集成了spring-cloud-starter-loadbalancer,所以不需要额外加注解了。负载均衡注解 @LoadBalanced 。如果没有loadbalancer的依赖,那就自己加上。

@Configuration
public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

 2.将调用的url改成在注册中心注册的名称。

public static final String PaymentSrv_URL = "http://cloud-payment-service";

3. 添加测试的方法。

支付模块,添加当前接口方法。

1 @GetMapping(value = "/pay/get/port")
2 @Operation(summary = "获取端口号",description = "获取当前项目端口号")
3 public ResultData<String>  getInfoByConsul(HttpServletRequest request) {
4     int serverPort = request.getServerPort();
5     return ResultData.success("返回端口号:" + serverPort) ;
6 }

消费者模块,添加支付者模块接口方法的引用

1 @GetMapping(value = "/consumer/pay/get/port")
2 @Operation(summary = "获取接口",description = "获取接口")
3 public ResultData<String>  getPayPort() {
4     return restTemplate.getForObject(url + "/pay/get/port",ResultData.class);
5 }

4. 使用Services,为支付模块添加不同端口的服务。https://www.cnblogs.com/luyj00436/p/18580834 。支付模块的端口号为8001,添加的不同服务端口号为8002,8003。启动这3个服务。此时,我们在Consul可以看到这3个服务。

 4. 调用消费者模块的测试方法。发现轮番调用8001,8002,8003的方法,即负载均衡。

 基本原理

  1. 会在项目中创建一个DiscoveryClient对象
  2. 通过DiscoveryClient对象,就能够获取注册中心中所有注册的服务
  3. 然后将获取的服务与调用地址中传入的微服务名称进行对比
  4. 如果一致,就会将微服务集群的相关信息返回
  5. 然后通过负载均衡算法,选择出其中一个服务进行调用

负载均衡算法切换

LoadBlancer默认包含两种负载均衡算法,轮询算法和随机算法,同时还可以自定义负载均衡算法(通过实现接口完成,不详细说了,一般我们不会这么用)。

切换算法方式如下:

 1 @Configuration
 2 //下面的value值大小写一定要和consul里面的名字一样,必须一样
 3 //value的值是指对哪个微服务生效
 4 @LoadBalancerClient(value = "cloud-payment-service",configuration = RestTemplateConfig.class)
 5 public class RestTemplateConfig
 6 {
 7     @Bean
 8     @LoadBalanced
 9     public RestTemplate restTemplate(){
10         return new RestTemplate();
11     }
12 
13     @Bean
14     ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
15                                                             LoadBalancerClientFactory loadBalancerClientFactory) {
16         String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
17 
18         //这里切换成了随机算法
19         return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
20     }
21 }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845475.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware Cloud Director 10.6 - 领先的云服务交付平台

VMware Cloud Director 10.6 - 领先的云服务交付平台VMware Cloud Director 10.6 - 领先的云服务交付平台 VMware Cloud Director | Leading Cloud Service Delivery Platform 请访问原文链接:https://sysin.org/blog/vmware-cloud-director-10/ 查看最新版。原创作品,转载请…

Winform窗体控件双向绑定数据模拟读写PLC数据

1.用Modbus工具模拟PLC2.创建一个实体类点击查看代码 internal class Data : INotifyPropertyChanged {ushort[] ushorts = new ushort[10];public ushort D0 { get => ushorts[0]; set { ushorts[0] = value; OnPropertyChanged(nameof(D0)); } }public ushort D1 { get =&…

解决:点击编辑时预警通知人(与科室下拉联动)会闪一下Id再显示汉字

表单:<el-form-item label="通知人所在科室:" prop="ksdm"><el-selectv-model="formData.ksdm"placeholder="请选择"style="width: 90%"clearablefilterable@change="handleKsChange"><el-option…

浏览器拨测:将网站护航的阵地再前推一米

建立对整个服务周期的可观测能力并对其中潜在的攻击做出识别,是保证内容合规和服务质量的重要的基础能力。近年来,针对网站的攻击形式愈发多样,手段也变得更加隐蔽,使用浏览器拨测来监控服务的整个生命周期有助于及时发现攻击,保护核心业务链路不受损。作者:泉思 “从你在…

Diffusion Model的数学原理

基本概念 Forward ProcessReverse Process

高效办公必备!四款好用的电脑桌面日程提醒软件推荐

很多打工人每天的日程安排非常多,很容易会忘记或遗漏。如果能给在电脑桌面上直接使用一款日程提醒软件,就可以准时提醒每项日程事项了,轻松提高办公效率! 下面介绍4款好用的电脑桌面日程体系软件! 一、Win系统自带日历 点击电脑桌面右下角的日期,可以在日历中的某个日期下…

2024年10款最受欢迎的项目管理工具,你用过几款?

项目管理工具在现代工作中扮演着至关重要的角色,2024 年又有哪些最受欢迎的工具呢?本文将为你详细介绍 10 款热门项目管理工具,快来看看你用过几款。 在当今快节奏的商业环境中,项目管理的效率直接影响着企业的发展和竞争力。随着科技的不断进步,各种项目管理工具层出不穷…

2099年:IDEA 2024.3 安装激活使用教程

IntelliJ IDEA简介 IntelliJ IDEA是一款非常强大的Java集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 要求 在开始之前,请确保您的计算机满足以下系统要求:操作系统:Windows、macOS或Linux 处理器:至少1 GH…

creo分割面

分割一个面成两个面.el-image-viewer__wrapper { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 2147483647 !important } .el-image-viewer__btn { position: absolute; z-index: 1; display: flex; align-items: center; justify-content: center; borde…

记录Vue3中使用pinia可能遇到的问题及解决方法

1.在安装依赖时容易停留pinia,附带持久化插件使用的地址 https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/ 方法:请按照以下步骤: 删除 C:\Users账户中的 .npmrc 文件在命令提示符里执行 npm cache verify在命令提示符里执行 npm config set registry htt…

git报错403怎么解决

Git报错403及解决询问AI主要有以下可能原因:创建SSH:(不要用中文,管理员权限打开PowerShell运行下面的命令,地址可以自定义)ssh-keygen -t rsa -b 4096 -C "2919356315@qq.com" -f "C:/Users/lzh/.ssh/id_rsa"查看SSH:cat C:/Users/lzh/.ssh/id_rsa.p…