Spring Cloud——LoadBalancer

devtools/2024/10/19 13:25:30/

Spring Cloud——LoadBalancer

  • 一、负载均衡(LoadBalance)
    • 1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别
  • 二、LoadBalancer
    • 1.Spring RestTemplate as a LoadBalancer Client
    • 2.编码使用DiscoveryClient动态获取所有上线的服务列表
    • 3.从默认的轮询,切换为随机算法

一、负载均衡(LoadBalance)

  • 负载均衡(Load Balance),简单的说就是将用户的请求分摊到多个服务上,从而使系统达到高可用性,常见的负载均衡有软件NginxLVS,硬件F5等。
  • Spring Cloud LoadBalancer是由Spring Cloud官网提供的一个开源的、简单易用的客户端负载均衡器,它包含在Spring Cloud Commons中用来替换以前的Ribbon组件。想比较于RibbonSpring Cloud LoadBalancer不仅能够支持RestTemplate,还支持WebClientWebClientSpring Web Flux中提供的功能,可以实现响应式异步请求)

1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别

  • Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求,即负载均衡是由服务端实现的。
  • LoadBalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

二、LoadBalancer

在这里插入图片描述

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

1.Spring RestTemplate as a LoadBalancer Client

  • 第一步,在服务调用方加入LoadBalancer组件:
    <!--loadbalancer-->
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    
  • 第二步,赋予RestTemplate负载均衡的能力:
    @Configuration
    public class RestTemplateConfig {/*** 使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力*/@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
    }
    

2.编码使用DiscoveryClient动态获取所有上线的服务列表

  • 负载均衡算法:rest接口第几次请求数%服务器集群总数量 = 实际调用服务器位置下标,每次服务器重启后rest接口计数从1开始。
     @Resourceprivate DiscoveryClient discoveryClient;@GetMapping("/discovery")public ResponseResult<List<String>> discovery() {List<String> list = new ArrayList<>();List<String> services = discoveryClient.getServices();for (String element : services) {List<ServiceInstance> instances = discoveryClient.getInstances(element);for (ServiceInstance ele : instances) {list.add(ele.getServiceId() + "     " + ele.getHost() + "       " + ele.getPort() + "       " + ele.getUri());}}return ResponseResult.success(list);}
    

3.从默认的轮询,切换为随机算法

/*** 将负载均衡的默认轮询算法,切换为随机算法*/
@Configuration
@LoadBalancerClient(//下面的value值大小写一定要和consul里面的名字一样,必须一样value = "cloud-payment-service", configuration = RestTemplateConfig.class)
public class RestTemplateConfig {@Bean@LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力public RestTemplate restTemplate() {return new RestTemplate();}@BeanReactorLoadBalancer<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/devtools/28309.html

相关文章

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…

电子邮件显示,微软对 OpenAI 的数十亿美元投资是由谷歌

我们的机器学习落后谷歌多年&#xff01;斯科特在 2019 年 6 月 12 日的一封 email 中痛心疾首地写道&#xff0c;我们的基础设施无法胜任训练谷歌的 BERT 语言模型&#xff0c;微软工程师不得不花六个月时间复制它。 微软对谷歌早期使用人工智能的印象非常深刻&#xff0c;斯…

Android 文件传输

经常写adb命令传文件&#xff0c;结果发现Android studio有自带的文件管理器&#xff0c;可以上传下载文件。

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

HTML_CSS学习:常用的字符属性

一、字体大小 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>字体大小</title><style>/*body{*//* font-size: 20px;*//*}*/.atguigu1{font-size: 40px;}.atguigu2{font-size: 30px;…

Vue2 - 完成实现ElementUI中el-dialog弹窗的拖拽功能(宽度高度适配,且关闭后打开位置居中)

我们在做后台管理系统时常用到ElementUI 中的 el-Dialog,但是官方文档并未我们提供 el-Dialog弹窗如何实现拖拽功能,我们通常需要思考如何让用户能够自由地拖动弹窗,在页面上调整位置以获得更好的用户体验。在下面的博客文章中,我们将实现如何为 ElementUI 的 el-Dialog 弹…

C++中的引用

1.引用的基本使用&#xff1a; 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名原名 示例&#xff1a;本来变量a指向这个地址&#xff0c;存放了数值10&#xff0c;现在我们想让b也指向这个地址&#xff0c;并且将该地址里存放的值修改&#xff0c;于是我们…

C++学习第十七课:深入探索标准模板库(STL)

C学习第十七课&#xff1a;深入探索标准模板库&#xff08;STL&#xff09; 标准模板库&#xff08;STL&#xff09;是C的基石之一&#xff0c;它提供了一系列高效的、通用的、类型安全的组件。STL包括了容器、迭代器、算法和仿函数等&#xff0c;极大地提高了C程序的编写效率…