Spring Cloud 负载均衡配置 (@LoadBalanced)

news/2025/3/9 10:32:40/文章来源:https://www.cnblogs.com/herebug/p/18603773

一、负载均衡 目前是两种 Ribbon 和 spring-cloud-loadbalancer

- Ribbon

  • 已经闭源
  • 配置策略较多 :轮询,随机,权重,自定义 四种负载均衡方案
  • 配置方式
    • yml
    • 注解

- spring-cloud-loadbalancer

  • 属于springcloud,项目兼容性更好
  • 配置策略: 更注重 自定义(默认为轮询)
  • 配置方式
    • 注解

二、使用Ribbon进行自定义负载均衡配置

1、使用yml配置

ribbon: # 配置负载均衡策略 "order-service": NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule # 这里配置负载均衡策略为 RoundRobin # 使用轮询策略 ILoadBalancer: RetryHandler: com.netflix.loadbalancer.RetryHandler PingInterval: 1000 # 设置ping的间隔

2、使用自定义配置

在配置类中配置的负载均衡策略,会运用与全局,所以指定的话,需要使用 @RibbonClients
和@RibbonClien 配置设置

@Configuration 
public class LoadBalancerConfig { // 为 order-service 配置轮询负载均衡策略 @Bean public IRule orderServiceLoadBalancerRule() { return new RoundRobinRule(); // 使用轮询策略 } // 为 stock-service 配置随机负载均衡策略 @Bean public IRule stockServiceLoadBalancerRule() {return new RandomRule(); // 使用随机策略 }
}注意:定义一个全局使用的配置类,不能放在启动类的目录,会被全局扫描,需要放在一个启动类不会扫描的类(启动类会扫描和它相同包里面的所有配置)@RibbonClients({ 
@RibbonClient(name = "order-service", configuration = OrderServiceRibbonConfig.class), 
@RibbonClient(name = 	"stock-service", configuration = StockServiceRibbonConfig.class) 
})
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

3、自定义策略实现:

通过实现 IRule 接口 并 实现 其 choose 方法,自定义定义负载均衡策略 自行查询,配置方案

三、使用 spring-cloud-loadbalancer 实现负载均衡配置

目前:loadbalancer 只支持通过注解来设置负载均衡器

1、通过注解配置

@LoadBalancerClients({@LoadBalancerClient(value = "stock-service",name = "stock-service", configuration = OrderConfig.class),@LoadBalancerClient(value = "order-service",name = "stock-service", configuration = RandomLoadBalancer.class),})
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

如上,不同的服务使用不同的配置,可按照上述的内容配置;

2、自定义策略实现

接口:
image
依赖已实现:
image

通过了解源码:可以发现,目前存在的负载均衡策略,都是通过实现ReactorServiceInstanceLoadBalancer这个接口实现的

进入实现类,发现:
image

public Mono<Response<ServiceInstance>> choose(Request request) {}
这个类中实现了,获取服务的完整逻辑,所以,我们如果要自定义负载均衡配置,就可以参考这些实现;

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

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

相关文章

架构信息收集

引子:一个Web应用的构成,由诸多组件&服务相结合,而域名仅是处于Web架构中最表层的一部分。本篇则由表及里,依次对整个Web应用架构,所需收集的信息类型、收集方式等进行介绍。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.2 架构…

x86指令集 字节大小

x86指令集 字节大小 https://bbs.kanxue.com/thread-190127.htm 最近对x86_32架构下的许多程序进行了指令长度统计,结果表明所有程序所涉及的指令长度范围均为:1~11字节。而根据INTEL 开发者手册上介绍的指令的最大长度限制为15字节。但是,在什么情况或者架构上才会有12~15字…

实际项目中不一样的《桥接模式》

图片缩略图功能 需要对图片生产缩略图,压缩并保存到不同的介质中。输入端可能是本地图片,也可能是网络图片。保存的位置可能是本地,也有可能是第三方的minio、阿里云oss、七牛云oss。并且这些途径可能随时扩展。为了设计的灵活性,这里就要把输入可输出抽象出来,应用层通过…

一款渗透测试信息收集集成工具--mitan密探

本工具仅供安全测试人员运用于授权测试, 禁止用于未授权测试, 违者责任自负。作者及本公众号相关负责人不对您使用该工具所产生的任何后果负任何法律责任,在扫描模块使用多线程,在测试过程中根据目标的实际情况进行调整,切勿进行大线程低延时的大规模快速扫描,以免对目标服务…

最大网络流基本概念

1. 基本概念 1.1 流网络,不考虑反向边如果存在反向边也没事,不如有u->v和v->u两条边,那么就可以新加入一个点 p,u->v,v->p,p->u,转化为这三条边 1.2 可行流,不考虑反向边 1.2.1 两个条件:容量限制、流量守恒 容量限制:每条边流的不能超过这条边的权值 流量守…

sqli-labs

sqli-labs Less-1 基于错误的GET单引号字符型注入 index.php分析error_reporting(0); 不反馈错误 isset($_GET[id]) 检查($ _GET[id])参数是否设置 LIMIT 0,1 从第一条开始记录,只取一条记录1.推测闭合方式?id=1\输入\ ,后面是 ,推测是单引号闭合 输入 ?id=1 报错 输入 ?…

一文读懂:AI创业和投融资领域常见专有名词缩写详解

=== 预计悦读时间:3分钟 | 📚字数:约1000字——知识满满,不虚此行!🤔为什么你需要这篇神器? 就像由算法推荐给各位好奇的同学一样,我也被这些术语所困扰,想象一下,你正沉浸在一场关于AI的精彩演讲或者播客中,突然,一个神秘的英文缩写从嘉宾口中飞出,像是外星语言般让你瞬…

Simplex Method (单纯形方法)

学习目标:在本节中,我们将学习使用\(\textbf{单纯形法}\)解决线性规划最大化问题:(In this section, we will learn to solve linear programming maximization problems using the Simplex Method:)识别并建立标准的最大化形式的线性规划 (Identify and set up a linear pr…

《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解

《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解@目录二、高级篇(大厂进阶)4.Docker网络4.1Docker网络是什么4.2常用基本命令4.3能干嘛4.4网络模式4.4.1总体介绍4.4.2容器实例内默认网络IP生产规则4.4.3案例说明…

实验6 C++

任务四:Vector.hpp #pragma once #include <iostream> #include <stdexcept>using namespace std;template <typename T> class Vector { public:Vector(int n, int p = 0);Vector(const Vector<T> &v);~Vector();int get_size() const;T& a…

Docker安装Redis和Elasticsearch

本章将和大家分享在Docker中如何安装Redis和Elasticsearch。本章将和大家分享在Docker中如何安装Redis和Elasticsearch。废话不多说,下面我们直接进入主题。 一、Docker安装Redis 1、拉取最新版的 redis 镜像docker pull redis2、查看本地镜像docker images3、从官网获取 redi…

Redis应用—4.在库存里的应用

大纲 1.库存模块设计 2.库存缓存分片和渐进式同步方案 3.基于缓存分片的下单库存扣减方案 4.商品库存设置流程与异步落库的实现 6.库存入库时"缓存分片写入 + 渐进式写入 + 写入失败进行MQ补偿"的实现 7.库存扣减时"基于库存分片依次扣减 + 合并扣减 + 扣不了返…