Spring Cloud LoadBalancer负载均衡+算法切换

目录

    • 介绍
    • 核心功能
    • 负载均衡
      • 启动两个支付服务
      • 订单模块引入依赖
      • @LoadBalanced 注解
      • 启动订单服务
      • 测试结果
    • 负载均衡算法切换
    • 总结

介绍


Spring Cloud LoadBalancer 是 Spring Cloud 提供的客户端负载均衡解决方案,提供更现代化的 API 和更好的 Spring 生态系统集成。它支持微服务架构中服务调用的负载均衡,适用于分布式系统中的流量分发和故障转移。

核心功能


客户端负载均衡

  • 在客户端实现负载均衡逻辑,无需服务端代理。
  • 支持基于服务名的调用 (如 http://service-name),自动解析服务实例列表。

多种负载均衡策略

  • 默认支持 轮询 (Round Robin) 和随机 (Random) 策略。
  • 可自定义实现其他策略 (如加权轮询、最小连接数等)。

服务发现集成

  • 与 Spring Cloud 服务发现组件 (如 Eureka、Consul、Nacos) 无缝集成。
  • 动态获取服务实例列表,支持实例上下线自动更新。

响应式支持

  • 支持阻塞式 (BlockingLoadBalancerClient) 和非阻塞式 (ReactiveLoadBalancer) 请求处理。
  • 可与 RestTemplate 和 WebClient 配合使用。

高可用与容错

  • 内置重试机制 (如 spring.cloud.loadbalancer.retry.enabled=true)。
  • 支持健康检查,自动剔除故障实例。

配置灵活性

  • 通过 application.yml 或 application.properties 配置行为。
  • 支持自定义负载均衡算法和规则。

负载均衡


启动两个支付服务

分别启动两个支付服务,端口8001和8002。
在这里插入图片描述

订单模块引入依赖

<!-- SpringCloud loadbalancer -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

@LoadBalanced 注解

给 RestTemplate 标注 @LoadBalanced 注解,在客户端实现负载均衡功能。

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

启动订单服务

启动订单服务,端口9001。

@GetMapping("/order/pay/getInfoByConsul")
public String getInfoByConsul() {return restTemplate.getForObject(payment_url + "/pay/getInfoByConsul", String.class);
}

在这里插入图片描述

测试结果

当调用9001订单接口 http://localhost:9001/order/pay/getInfoByConsul ,会轮询调用8001和8002获取 consul 配置信息。

负载均衡算法切换


负载均衡算法默认有两种:

  • 轮询: RoundRobinLoadBalancer
  • 随机: RandomLoadBalancer

算法切换

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

@Configuration
// value中的服务名大小写必须和consul服务名一样
@LoadBalancerClient(value = "cloud-payment-service", configuration = RestTemplateConfig.class)
public class RestTemplateConfig {@Bean@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);}
}

总结


以上主要介绍了 Spring Cloud LoadBalancer 负载均衡、算法切换的相关知识,想了解更多 Spring Cloud LoadBalancer 知识的小伙伴请参考 Spring Cloud LoadBalancer 官网 进行学习,学习更多 Spring Cloud 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。

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

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

相关文章

Chrome 浏览器插件收录

1. Responsive Viewer 可以在同个窗口内&#xff0c;针对同一网站&#xff0c;添加多个不同设备屏幕显示。 在前端开发&#xff0c;需要多端适配&#xff0c;尤其是移动端响应式适配的网站开发中&#xff0c;可以同时测试多个不同屏幕的适配效果。 2. VisBug 提供工具栏&#x…

SQL 函数概述

SQL 函数概述 SQL 函数可以分为几大类&#xff0c;不同数据库系统可能有略微不同的实现。以下是主要的 SQL 函数分类&#xff1a; 1. 聚合函数 (Aggregate Functions) COUNT() - 计算行数 SUM() - 计算总和 AVG() - 计算平均值 MIN() - 找最小值 MAX() - 找最大值 GROUP…

MySQL学习笔记九

第十一章使用数据处理函数 11.1函数 SQL支持函数来处理数据但是函数的可移植性没有SQL强。 11.2使用函数 11.2.1文本处理函数 输入&#xff1a; SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 输出&#xff1a; 说明&#…

认识vue中的install和使用场景

写在前面 install 在实际开发中如果你只是一个简单的业务实现者&#xff0c;那么大部分时间你是用不到install的&#xff0c;因为你用到的基本上都是别人封装好的插件、组件、方法、指令等等&#xff0c;但是如果你需要给公司的架构做建设&#xff0c;install就是你避不开的一个…

【SpringCloud】构建分布式系统的利器

一、引言 在当今数字化时代&#xff0c;随着业务规模的不断扩大和用户量的急剧增长&#xff0c;单体应用逐渐暴露出诸多局限性&#xff0c;如可扩展性差、维护困难等。分布式系统应运而生&#xff0c;而 Spring Cloud 则成为了构建分布式系统的热门框架之一。它提供了一系列丰…

mkdir通配符详解

在 mkdir 命令中使用通配符可以简化批量创建目录的操作。通配符如 {} 和 * 可以用来生成多个目录名称&#xff0c;从而减少重复输入。以下是一些常见的使用方法和示例。 使用 {} 通配符 {} 通配符可以用来生成一系列的目录名称&#xff0c;语法如下&#xff1a; mkdir dir_{…

Transformer的Word Embedding

一、Transformer 中的词嵌入是什么&#xff1f; 1. 定义与作用 • 词嵌入&#xff08;Word Embedding&#xff09;&#xff1a;将离散的词语映射为低维连续向量&#xff0c;捕捉语义和语法信息。 • 在 Transformer 中的位置&#xff1a; • 输入层&#xff1a;每个词通过嵌入…

Linux 进程间通信:信号机制

Linux 进程间通信&#xff1a;信号机制 在多进程操作系统中&#xff0c;进程之间的通信至关重要&#xff0c;尤其是在Linux系统中&#xff0c;信号&#xff08;Signal&#xff09;作为一种特殊的进程间通信方式&#xff0c;广泛用于进程之间的协调和控制。信号可以看作是操作系…

基于TRIZ创新方法论的九屏法分析系统

1. 文件头与库导入 # -*- coding: utf-8 -*- import streamlit as st import pandas as pd import numpy as np import plotly.graph_objects as go from datetime import datetime from sklearn.ensemble import RandomForestRegressor ​​作用​​&#xff1a;设置文件编码…

【LangChain框架组成】 LangChain 技术栈的模块化架构解析

目录 整体架构概述 整体架构层级划分 模块详细解析 1. 部署与服务层&#xff08;LangServe & Deployments&#xff09; 2. 应用模板层&#xff08;Templates & Committee Architectures&#xff09; 3. 核心功能层&#xff08;LangChain&#xff09; 4. 社区扩展…

自定义数据结构的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定义数据结构放入QVariant&#xff0c;在序列化时抛出异常 ASSERT failure in QVariant::save: “invalid type to save” 自定义数据结构如struct MyData&#xff0c;除了要在结构体后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的输入输出&…

vxe-table 启用 checkbox-config.reserve 实现分页复选框选择功能、获取已选数据的用法

vxe-table 启用 checkbox-config.reserve 实现分页复选框选择功能、获取已选数据的用法 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.com/x-extends/vxe-table gitee&#xff1a;https://gitee.com/x-extends/vxe-table 效果 代码 获取已选择…

蓝桥杯-门牌制作

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝要为一条街的住户制作门牌号。 这条街一共有 20202020 位住户&#xff0c;门牌号从 11 到 20202020 编号。 小蓝制作门牌的方法是先制作 00 到 99 这几个数字…

C#调用Lua方法1+C#调用Lua方法2,3

xLua中Lua调用C#代码 原因&#xff1a;C#实现的系统&#xff0c;因为Lua可以调用&#xff0c;所以完全可以换成Lua实现&#xff0c;因为Lua可以即时更改&#xff0c;即时运行&#xff0c;所以游戏的代码逻辑就可以随时更改。 实现和C#相同效果的系统&#xff0c;如何实现&#…

macOS Chrome - 打开开发者工具,设置 Local storage

文章目录 macOS Chrome - 打开开发者工具设置 Local storage macOS Chrome - 打开开发者工具 方式2&#xff1a;右键点击网页&#xff0c;选择 检查 设置 Local storage 选择要设置的 url&#xff0c;显示右侧面板 双击面板&#xff0c;输入要添加的内容 2025-04-08&#xff…

zustand 源码解析

文章目录 实现原理createcreateStore 创建实例CreateStoreImpl 实现发布订阅createImpl 包装返回给用户调用的 hookuseSyncExternalStoreWithSelector 订阅更新zustand 性能优化自定义数据更新createWithEqualityFncreateWithEqualityFnImpl 返回 hookuseSyncExternalStoreWith…

kotlin,Android,jetpack compose,日期时间设置

AI生成&#xff0c;调试出来学习&#xff0c;这些小组件会用了&#xff0c;就可以组合一个大点的程序了。 package com.example.mydatetimeimport android.app.AlertDialog import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.co…

构建k8s下Helm私有仓库与自定义Chart开发指南

#作者&#xff1a;程宏斌 文章目录 自定义helm模板1、开发自己的chare包2、调试chart3、安装chart 自定义helm模板 https://hub.helm.sh/ 1、开发自己的chare包 [rootmaster ~]# helm create mychare //创建一个名为mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

MOP数据库中的EXPLAIN用法

EXPLAIN 是 SQL 中的一个非常有用的工具&#xff0c;主要用于分析查询语句的执行计划。执行计划能展示数据库在执行查询时的具体操作步骤&#xff0c;像表的读取顺序、使用的索引情况、数据的访问方式等&#xff0c;这有助于我们对查询性能进行优化。 语法 不同的数据库系统&…

项目范围蔓延的十大诱因及应对策略

项目范围蔓延的十大诱因及应对策略是什么&#xff1f;主要在于&#xff1a; 缺乏清晰目标、利益相关方过多、需求变更未及时管控、缺少优先级体系、沟通链条冗长、管理层干预频繁、资源与预算不匹配、技术风险被低估、合同或协议不完善、缺乏阶段性验收与复盘。其中缺乏清晰目标…