SpringCloud LoadBalancer 新一代负载均衡器

2023-10-27

前言

工作中使用 OpenFeign 进行跨服务调用,最近发现线上经常会遇到请求失败。

java.net.ConnectException: Connection refused: connect
复制代码

通过排查我们发现不是接口超时,而是有时候会请求到已经下线的服务导致报错。这多发生在服务提供者系统部署的时候,因为系统部署的时候会调用 Spring 容器 的 shutdown() 方法, Eureka Server 那里能够及时的剔除下线服务,但是我们上一篇文章中已经知道 readOnlyCacheMapreadWriteCacheMap 同步间隔是 30SClient 端拉取实例信息的间隔也是 30S,这就导致 Eureka Client 端存储的实例信息数据在一个临界时间范围内都是脏数据。

调整 Eureka 参数

既然由于 Eureka 本身的设计导致会存在服务实例信息延迟更新,那么我们尝试去修改几个参数来降低延迟

  • Client 端设置服务拉取间隔3S, eureka.client.registry-fetch-interval-seconds = 3
  • Server 端设置读写缓存同步间隔 3S,eureka.server.response-cache-update-interval-ms=3000

这样设置之后经过一段时间的观察发现情况有所改善,但还是存在这个问题,而且并没有改善多少。

LoadBalancer 如何获取实例信息

EurekaOpenFeign 的文章中都有提到,OpenFeign 进行远程调用的时候会通过负载均衡器选取一个实例发起 Http 请求。我们 SpringCloud 版本是 2020,已经移除了 ribbon,使用的是 LoadBalancer

通过 debug OpenFeign 调用的源码发现它是从 DiscoveryClientServiceInstanceListSupplier的构造方法获取实例信息集合 List<ServiceInstance> 的,内部调用到 CachingServiceInstanceListSupplier 构造方法,重点看 CacheFlux.lookup()

public CachingServiceInstanceListSupplier(ServiceInstanceListSupplier delegate, CacheManager cacheManager) {
   super(delegate);
   this.serviceInstances = CacheFlux.lookup(key -> {
      // TODO: configurable cache name
      Cache cache = cacheManager.getCache(SERVICE_INSTANCE_CACHE_NAME);
      if (cache ==
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCloud LoadBalancer 新一代负载均衡器 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 树莓派4b配置OpenWrt联网

    文章目录 前言 一 下载固件 二 配置wan口 三 简单介绍 1 修改无线名称 设置密码 2 下载软件包 总结 前言 树莓派4b内置wifi模块 加一个千兆网口 好像有一种办法 通过无线wifi链接其他wifi通网 然后把这个网口作为lan
  • 登录鉴权

    注册登录鉴权 1 1 用户注册 前台需要给我们传递用户名 密码 手机号 手机验证码 验证用户前台传过来的数据是否符合规范 我们使用的Hibernate Validator框架实现的服务端表单校验 短信验证码这块 我们采用的阿里的大于短信接口
  • python 处理数据小工具_Python数据处理工具使用方法整理

    从csv文件创建DataFrame类型的数据结构 gt gt gt df pd read csv xxx csv DataFrame类型的形状和长度 gt gt gt df shape 38 39 gt gt gt len df 38 各列
  • mac的Vscode 中 Remote-SSH 连接不上服务器,但是在终端中使用SSH可以连接

    Vscode 中 Remote SSH 连接不上服务器 但是在终端中使用SSH可以连接 我试了各种办法 最后准备删除配置文件看看 结果发现没有权限 怀疑是我用了conda管理环境 可能造成base环境权限变了 总之 我在vscode的终端中
  • 解决android每次请求,后台sessionId都会变换(springboot配置web.xml)

    问题 后台生成验证码以后 存放到session缓存中 将验证码发送给指定手机 当安卓手机输入验证码调用注册接口时候 后台接口从session中无法取出放入的验证码 原因 android每次请求 后台sessionId都会变换 解决方法 1
  • Word论文书写--页眉线设置

    开始 gt 段落 gt 边框和底纹 基本设置如下 结果
  • 用Flex布局模型开发网页

    目录 一 为什么要用Flex布局 对比浮动有什么优点 二 Flex布局组成 三 如何使用Flex布局 1 基本方法 2 主轴对齐方式 3 侧轴对齐 4 改变主轴方向 5 弹性盒子换行 四 弹性盒子多场景运用 1 圣杯布局 2 如何让父盒子里
  • JBoss 系列四十四:jBPM5示例之 GateWay

    jBPM5中的GateWay如果选择AND则表示平行执行多个Task ParallelExecute示例演示jBPM5中如何平行执行多个Task ParallelExecute流程如下 上图为平行执行多个Task的流程 其中Task1 1
  • 002-从零搭建微服务-认证中心(二)

    写在最前 如果这个项目让你有所收获 记得 Star 关注哦 这对我是非常不错的鼓励与支持 源码地址 https gitee com csps mingyue 文档地址 https gitee com csps mingyue wikis 创
  • Shadow Build 读取不到配置文件

    问题 使用阴影构建后 无法读取配置文件 方法 阴影构建在单独目录中搜索 普通构建在项目目录搜索
  • MySQL的安装与配置

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web应用方面 MySQL 是最好RDBMS Rel
  • C语言文件操作详解

    C语言文件操作详解 一 文件指针和流 1 文件指针 2 流 二 文件的打开与关闭 1 fopen与fclose函数 2 文件打开方式 3 实例演示 三 文件的顺序读写 一 fgetc与fputc函数 1 fgetc总述 2 fgetc使用实
  • UE4-材质自发光

    1 创建材质 选择无光照 将贴图及控制自发光强度参数逻辑连接完成 使用staticswitchparameter 节点进行判断是否开启自发光 2 设置完成后 在场景中选择自发光物体 细节面板找到光照 Lightmass 使用静态光照的自发光
  • Python 数据处理之散点图--matplotlib

    import matplotlib pyplot as plt plt rcParams font sans serif SimHei 解决中文显示问题 x values 1 2 3 4 5 y values 3000 4000 6000
  • 华为od机试 最大价值的矿堆 Java

    题目 我们规定 0表示空地 1表示银矿 2表示金矿 矿堆表示由相邻的金矿或银矿连接形成的地图 银矿价值是1 金矿价值是2 你的目标是找出地图中最大价值的矿堆 并且输出该矿堆的价值 示例1 输入 22220 00000 00000 01111
  • SeleniumLibrary4.5.0 关键字详解(五)

    SeleniumLibrary4 5 0 关键字详解 五 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • 全基因组选择-GS的技术评估

    基因组选择的流程 GS一般包括以下步骤 图1 首先建立参考群体 reference population 参考群体中每个个体都有已知的表型和基因型 通过合适的统计模型可以估计出每个SNP或不同染色体片段的效应值 然后对候选群体 candid
  • Tomcat 弱口令 && 后台getshell漏洞

    漏洞编号 VUL 2021040008 爆发时间 2018 10 10 漏洞简介 Tomcat支持在后台部署war文件 可以直接将webshell部署到web目录下 其中 欲访问后台 需要对应用户有相应权限 影响版本 Tomcat8 x T
  • vue格式化时间戳

    js var articleContent new Vue el articleContent data articles Vue filter yearMonthTime function value value为13位的时间戳 func
  • SpringCloud LoadBalancer 新一代负载均衡器

    前言 工作中使用 OpenFeign 进行跨服务调用 最近发现线上经常会遇到请求失败 java net ConnectException Connection refused connect 复制代码 通过排查我们发现不是接口超时 而是有时