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

SpringCloud-03 LoadBalancer服务调用与负载均衡

LoadBalancer(负载均衡器)是一种网络设备或软件,用于将网络流量分配到多个服务器,以实现负载均衡和高可用性。它可以帮助确保网络服务器能够有效地处理大量的请求,并避免某些服务器过载而导致性能下降或服务不可用。

Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。

loadbalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

LoadBalancer 在工作时分成两步:
第一步,先选择ConsulServer从服务端查询并拉取服务列表,知道了它有多个服务(上图3个服务),这3个实现是完全一样的,
默认轮询调用谁都可以正常执行。
第二步,按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。

//在800端口拷贝与8001端口一样的服务

在这里插入图片描述

Consul数据持久化配置

//在consul同级目录下新建consul_startt.bat文件,内容如下
@echo.服务启动......  
@echo off  
@sc create Consul binpath= "D:\devSoft\consul_1.17.0_windows_386\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir D:\devSoft\consul_1.17.0_windows_386\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause

**注意:**consul里data配置的缩进不要用tab键,要用空格
在这里插入图片描述

修改80端口(调用端口)

//在80端口服务pom文件中添加依赖
<!--loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

//修改controller
    @GetMapping("/consumer/pay/get/info")
    public String getByConsul() {
        return restTemplate.getForObject(paymentSrv_URL+"/pay/get/info", String.class);
    }

在这里插入图片描述

会自动交替调用8001端口和8002端口
在这里插入图片描述
在这里插入图片描述
通过DiscoveryClient动态获取服务列表

    @Resource
    private DiscoveryClient discoveryClient;
    @GetMapping("/consumer/discovery")
    public String discovery()
    {
        List<String> services = discoveryClient.getServices();
        for (String element : services) {
            System.out.println(element);
        }

        System.out.println("===================================");

        List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service");
        for (ServiceInstance element : instances) {
            System.out.println(element.getServiceId()+"\t"+element.getHost()+"\t"+element.getPort()+"\t"+element.getUri());
        }

        return instances.get(0).getServiceId()+":"+instances.get(0).getPort();
    }

负载均衡有两种算法:轮询算法 和 随机算法 一般用轮询


http://www.kler.cn/a/296719.html

相关文章:

  • 《深入解析 ESLint 配置:从零到精通》
  • 如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)
  • mac上jmeter的安装和使用
  • 面试准备-7
  • PAT甲级-1029 Median
  • AndroidStudio清除重置Http Proxy代理的方式
  • 论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS
  • HRGraph: 利用大型语言模型(LLMs)构建基于信息传播的HR数据知识图谱与职位推荐
  • 3.创建型设计模式详解:生成器模式与原型模式的深度解析
  • 如何在VSCODE中查看西门子PLC的SCL程序?
  • 达梦数据库:dm与mysql语法差异(select)
  • CAP (C# Distributed Application Framework)
  • [Linux Kernel Block Layer第一篇] block layer架构设计
  • Spring Boot项目中如何解决循环依赖
  • 大模型构建合作性的Agent,多代理框架MetaGpt
  • QT 读取Excel表
  • Flask如何创建并运行数据库迁移
  • 【系统架构设计师-2012年】综合知识-答案及详解
  • 【系统架构设计师】工厂方法设计模式
  • 使用PyTorch Lightning力量精简空间分析