首页 > 其他分享 >【SpringCloud】LoadBalancer——服务调用与负载均衡

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

时间:2024-12-02 16:10:16浏览次数:8  
标签:负载 服务 模块 SpringCloud 算法 均衡 public LoadBalancer

基本介绍

主要功能: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
    @LoadBalanced
    public 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 }

 

标签:负载,服务,模块,SpringCloud,算法,均衡,public,LoadBalancer
From: https://www.cnblogs.com/luyj00436/p/18580829

相关文章

  • 亲妈级完美部署Traefik+LoadBalancer验证,包成功!
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录K8s-Ingress介绍1.快速开始1.1权限和访问权限`00-role.yml``00-account.yml``01-role-binding.yml`1.2Traefik部署`02-traefik.yml`1.3Traefik服务部署`02-traefik-services.yml`1.4业务......
  • 通过自定义feignclient 的LoadBalancerFeignClient实现灵活的负载均衡策略
    通过自定义feignclient的LoadBalancerFeignClient或IRule能实现完全自定义的负载均衡策略,本文主要是通过实现自定义的LoadBalancerFeignClient而达到自定义的负载均衡策略示例代码实现如下:packagecn.zuowenjun.demo;importcom.netflix.loadbalancer.Server;importfeign......
  • 【Java毕业设计】基于Springcloud+SpringBoot+Vue的智慧养老系统
    源码获取:https://download.csdn.net/download/u011832806/89426620基于Springcloud+SpringBoot+Vue的智慧养老系统开发语言:Java数据库:MySQL技术:Springcloud+SpringBoot+MyBatis+Vue.js+Eureka+elementUI工具:IDEA/Ecilpse、Navicat、Maven系统演示视频:链接:https://pan.b......
  • springcloud组件openFeign
    openFeign是什么?1、openFeign是个声明式WebServer客户端,使用openFeign让编写WebService客户端更加简单2、它的使用方法是定义一个服务接口然后在上面添加注解3、openFeign也支持可拔插式的编码器和解码器4、SpringCloud对openFeign进行了封装使其支持了SpringMvc标准注解......
  • 【SpringCloud】Consul——服务注册与发现
    consul基础知识Consul是什么?Consul是一款开源的分布式服务发现与配置管理系统,由HashiCorp公司使用Go语言开发。官网地址:https://www.consul.io/,下载地址:https://developer.hashicorp.com/consul/install?product_intent=consulConsul能做什么服务发现:提供HTTP和DNS两种发现......
  • 12.SpringCloudAlibabaSentinel实现熔断和限流
    1.Sentinel1.1官网sentinel官网,类似SpringCloudCircuitBreaker。1.2是什么面向分布式、多语言异构化服务架构的流量治理组件。1.3下载地址https://github.com/alibaba/Sentinel/releases1.4能干吗Sentinel以流量为切入点,从流量控制、流量路由、熔断降级、系统自适......
  • SpringCloud微服务(一)
    前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。一、什么是微服务?微服务是一种架构风格,它是将一个大型的单体应用程序拆分成一组小型的、相互独立的服务,每个服务都专注于完成一个特定的业务功能,并且可以独立地进行开发、......
  • RCD负载箱的技术参数和规格有哪些需要注意的?
    RCD(ResidualCurrentDevice)负载箱是一种用于检测剩余电流的装置,广泛应用于电气设备、电力系统和建筑等领域。在购买和使用RCD负载箱时,需要关注一些技术参数和规格,以确保其性能和安全性能满足使用要求。以下是一些需要注意的RCD负载箱技术参数和规格:额定电压:RCD负载箱的额定电压......
  • nginx安装及负载均衡配置
    下载http://nginx.org/en/download.html nginx的负载均衡策略轮询(默认)每个请求按照请求时间顺序分配到不同的后端服务器,如果后端服务器挂了,则自动剔除。此策略还可以设置:权重,指定轮询的频率,weight和访问率成正比,用于后端服务器性能不均匀的情况。ip_hash客户端ip地址被用......
  • 03-06、SpringCloud第六章,升级篇,升级概述与Rest微服务案例构建
    SpringCloud第六章,升级篇,升级概述与Rest微服务案例构建一、Springcloud升级之后的变动发现springcloud升级之后,原来的各个框架都有所变化。二、Rest微服务构建案例工程以订单模块做一个微服务通用案例、Consumer消费者[order]通过rest调用Provider生产者[payment]提供......