二.LoadBalancer负载均衡服务调用(1)

ops/2024/11/25 7:29:08/

1.spring-cloud-loadbalancer概述

(1)官网

 2.客户端负载VS服务器端负载

loadbalancer本地负载均衡客户端VSNginx服务端负载均衡区别

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

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

3.loadbalancer负载均衡解析

(1)负载均衡理论

2.实操

注册服务

订单80模块修改pom

订单80模块修改controller

@GetMapping(value = "/consumer/pay/get/info")
    private String getInfoByConsul()
    {
        return restTemplate.getForObject(PaymentSrv_URL "/pay/get/info", String.class);
    }

测试:交替访问

(3)总结

负载均衡算法:rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标  ,每次服务重启动后rest接口计数从1开始。

 

List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service");

 

如:   List [0] instances = 127.0.0.1:8002

   List [1] instances = 127.0.0.1:8001

 

8001+ 8002 组合成为集群,它们共计2台机器,集群总数为2, 按照轮询算法原理:

 

当总请求数为1时: 1 % 2 =1 对应下标位置为1 ,则获得服务地址为127.0.0.1:8001

当总请求数位2时: 2 % 2 =0 对应下标位置为0 ,则获得服务地址为127.0.0.1:8002

当总请求数位3时: 3 % 2 =1 对应下标位置为1 ,则获得服务地址为127.0.0.1:8001

当总请求数位4时: 4 % 2 =0 对应下标位置为0 ,则获得服务地址为127.0.0.1:8002

如此类推......

3.负载均衡算法原理

(1)默认算法

轮询和随机

(2)算法切换

@Configuration
@LoadBalancerClient(
        //
下面的value值大小写一定要和consul里面的名字一样,必须一样
        
value = "cloud-payment-service",configuration = RestTemplateConfig.class)
public class RestTemplateConfig
{
    @Bean
    @LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);

        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}

 


http://www.ppmy.cn/ops/136511.html

相关文章

使用var/let/const的选择

对于var的使用 1、需要明白一个事实&#xff0c;var所表现出来的特殊性:比如作用域提升、window全局对象、没有块级作用域等都是一些历史遗留问题&#xff1b; 2、其实是JavaScript在设计之初的一种语言缺陷&#xff1b; 3、在实际工作中&#xff0c;我们可以使用最新的规范来…

HashMap的寻址算法(源码分析)

建议先看完我这篇文章HashMap底层原理-CSDN博客 hashmap插入值的时候&#xff0c;是如何找到数组索引位置的呢&#xff1f; 例如下图左边四个连续红点&#xff0c;是如何在插入的时候定位到了数组下标为3的位置&#xff1f; 来看看put方法的源码&#xff0c;里面有个hash&…

洛谷 B2038:奇偶 ASCII 值判断

【题目来源】https://www.luogu.com.cn/problem/B2038http://shnoip.openjudge.cn/level1/39/【题目描述】 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES&#xff0c;否则&#xff0c;输出 NO。 例如&#xff0c;字符 A 的 ASCII…

MQ重复消费与消息顺序

如何避免消息重复消费 RocketMQ&#xff1a;给每个消息分配了一个MessageID。这个MessageID就可以作为消费者判断幂等的依据。这种方式不太建议&#xff0c;原因是在高并发场景下这个MessageID不保证全局唯一性。 最好由业务方创建一个与业务相关的全局唯一的ID来区分消息&am…

springboot实战(17)(“大事件“——新增文章主体逻辑)

目录 一、新增文章涉及的数据表、实体类。 &#xff08;1&#xff09;表结构。 &#xff08;2&#xff09;实体类&#xff08;Article&#xff09; 二、接口文档分析。 &#xff08;1&#xff09;请求方式与请求路径。 &#xff08;2&#xff09;请求参数。 &#xff08;3&…

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理&#xff08;Message Broker&#xff09;软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP - Advanced Message Queuing Protocol&#xff09;。RabbitMQ 通过高效的消息传递机制&#xff0c;主要应用于分布式系统中解耦应用…

Java中的网络基础认知(如果想知道Java中有关网络基础的知识,那么只看这一篇就足够了!)

前言&#xff1a;网络基础是现代通信和信息技术的基石&#xff0c;涉及数据传输、网络协议、路由、交换、网络设备以及网络安全等多个方面&#xff0c;深入了解网络基础&#xff0c;不仅能提升技术能力&#xff0c;还能为更复杂的网络架构与应用打下坚实的基础。 ✨✨✨这里是秋…

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…