springcloud openfeign 偶现 Caused by: java.net.UnknownHostException

背景

最近查看日志发现某服务偶现Caused by: java.net.UnknownHostException
同时查看eureka的access.log 出现如下异常

10.xxx.xxx.xxx - - [27/May/2025:23:57:29 +0800] “PUT /eureka/apps/{appName}/{host}:xxx-job:8082?status=UP&lastDirtyTimestamp=1748351637173 HTTP/1.1” 404 -

问题关联分析

1. 问题链条

Eureka心跳续约失败(404) → 服务从注册中心下线 → 服务发现失败 → DNS解析失败 → UnknownHostException

2. 具体流程

  1. xxx-job 服务向Eureka发送心跳续约请求
  2. Eureka Server返回404,表示该服务实例不存在
  3. 经过几次失败后,Eureka Server将该服务实例从注册表中移除
  4. 其他服务调用 xxx-job 时,从Eureka获取不到该服务的实例信息
  5. Spring Cloud LoadBalancer无法解析 xxx-job 服务名
  6. 最终抛出 UnknownHostException: xxx-job

为什么会出现404错误

1. 服务注册不完整

# 可能的配置问题
eureka:client:initial-instance-info-replication-interval-seconds: 40  # 初始注册延迟太长instance-info-replication-interval-seconds: 30

2. Eureka Server清理策略

# Eureka Server可能过于激进地清理实例
eureka:server:eviction-interval-timer-in-ms: 60000  # 清理间隔enable-self-preservation: false       # 自我保护模式关闭

3. 网络问题导致注册失败

实例ID中的 host 可能存在DNS解析问题。

解决方案

1. 修复服务注册配置

eureka:client:service-url:defaultZone: http://eureka-server:8761/eureka/register-with-eureka: truefetch-registry: trueinitial-instance-info-replication-interval-seconds: 5instance-info-replication-interval-seconds: 10instance:prefer-ip-address: trueip-address: xxx.xxx.xxx.xxxinstance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}lease-renewal-interval-in-seconds: 10lease-expiration-duration-in-seconds: 30

2. 启用Eureka Server自我保护模式

eureka:server:enable-self-preservation: truerenewal-percent-threshold: 0.85eviction-interval-timer-in-ms: 120000

3. 添加重试机制

# 为Feign客户端添加重试
feign:client:config:default:retryer: feign.Retryer.Default

4. 监控和诊断

@Component
public class ServiceHealthMonitor {@Autowiredprivate EurekaClient eurekaClient;@Scheduled(fixedRate = 30000)public void checkServiceHealth() {Application app = eurekaClient.getApplication("xxx-job");if (app == null || app.getInstances().isEmpty()) {logger.warn("xxx-job服务不可用");}}
}

5. 应急预案

@Component
public class ServiceFallback {@Retryable(value = UnknownHostException.class, maxAttempts = 3)public String callXxxjob() {// 服务调用逻辑}@Recoverpublic String recover(UnknownHostException ex) {logger.error("服务调用失败,启用降级策略", ex);return "服务暂时不可用";}
}

验证步骤

  1. 检查Eureka Dashboard:确认xxx-job服务是否持续在线
  2. 监控日志:观察404错误的频率和时间模式
  3. 测试网络ping host
  4. 检查服务启动顺序:确保Eureka Server先启动

这个问题的核心是服务注册中心的状态不一致,建议重点解决服务注册稳定性问题。

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

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

相关文章

第12篇:数据库中间件日志设计与追踪系统落地实践

12.1 引言:中间件日志系统为何如此关键? 数据库中间件作为连接前端应用与后端数据库的“网关”,承载着路由、负载均衡、SQL 改写、权限控制等复杂逻辑。 在出现 性能问题、故障排查、安全审计 等场景中,若没有完善的日志体系&am…

OpenAI对抗法庭命令:捍卫ChatGPT用户隐私之战

人工智能公司OpenAI近期正积极对抗一项涉及隐私问题的法庭命令。该命令要求OpenAI保留所有ChatGPT用户日志,包括已删除的对话记录以及通过API调用生成的聊天内容。 命令背后的真实动机 值得注意的是,法院发布这一指令并非出于对用户隐私或内容安全的考…

嵌入式学习--江协stm32day5

USART 1. 引脚与接口层 异步引脚: TX:发送数据输出;RX:接收数据输入;SW_RX:单线半双工模式的接收引脚(替代 RX)。 同步引脚:SCLK:同步模式下的时钟输出&…

使用Fiddler抓包

有时候需要跟踪一些小程序的HTTP请求,但是无法像浏览器一样F12查看请求,因此需要借助其他的工具进行,在这里推荐使用Fiddler 配置 此时检查系统代理已经变成如下配置: 抓包 此时随便打开一个小程序,就可以进行抓包…

python学习打卡day47

DAY 47 注意力热图可视化 昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 # 可视化空间注意力热力图(显示模型关注的图像区域) def visualize_attention_map(model, test_loader,…

MySQL-运维篇

运维篇 日志 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&am…

Prompt Tuning(提示调优)到底训练优化的什么部位

Prompt Tuning(提示调优)到底训练优化的什么部位 在自然语言处理(NLP)领域,Prompt Tuning(提示调优)是一种轻量级的模型优化技术,其核心目标是通过优化提示(Prompt)来引导预训练语言模型(如GPT、BERT等)更好地完成特定任务,而无需大规模调整模型的主体参数。 一…

基于FPGA的超声波显示水位距离,通过蓝牙传输水位数据到手机,同时支持RAM存储水位数据,读取数据。

基于FPGA的超声波显示水位距离 前言一、整体框架二、代码架构1.超声波测距模块2.蓝牙数据发送模块3.数码管数据切换模块4.数码管驱动模块6.串口驱动7.顶层模块8.RAM ip核 仿真相关截图 前言 随着工业化进程的加速和环境保护意识的提升,对水资源管理和水位监测的需求…

OD 算法题 B卷【水果摊小买卖】

文章目录 水果摊小买卖 水果摊小买卖 小王手里有点闲钱,想做点水果买卖,给出两个数组m, n, m[i]表示第i个水果的成本价,n[i]表示第i个水果能卖出的价格;假如现在有本钱k,试问最后最多能赚多少钱&#xff1…

(新手友好)MySQL学习笔记(6):分组查询,正则表达式

目录 分组查询 创建分组 过滤分组 分组查询练习 正则表达式 匹配单个实例 匹配多个实例 正则表达式练习 练习答案 分组查询练习答案 正则表达式练习答案 分组查询 创建分组 group by 子句:根据一个或多个字段对结果集进行分组,在分组的字段上…

Android 之 kotlin 语言学习笔记四(Android KTX)

一、Android KTX 简介 Android KTX 是包含在 Android Jetpack 及其他 Android 库中的一组 Kotlin 扩展程序。KTX 扩展程序可以为 Jetpack、Android 平台及其他 API 提供简洁的惯用 Kotlin 代码。为此,这些扩展程序利用了多种 Kotlin 语言功能,其中包括&…

云原生思维重塑数字化基座:从理念到实践的深度剖析

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:云原生为何成为数字化的“基础设施语言”? 随着5G、人工智能、物联网等技术逐步进入规模化落地阶段&am…

【C/C++】STL实现版本为什么比手写版本高?

文章目录 为什么标准库版本效率更高?1 具体介绍1.1 **内联优化(Inlining)和模板展开**1.2 **分支预测友好(Branch Prediction)**1.3 **迭代器解耦 静态分发**1.4 **代码紧凑,编译器优化空间大**1.5 **高质…

35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题

江科大学长又发布了第二期的编写技巧! 大家可以看看:https://space.bilibili.com/383400717 最后面给了一个未完成的任务: 这里我已经把这个问题给解决了! 总代码放在资源里面,key.c放在文章最后面!同时感…

STM32什么是寄存器

提示:文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问: 1、什么是寄存器? 答:在4GB的地址空间中,512MB的block2上,每4个字节组成32位,这个32位为一个单元,控制&a…

【Pinia】Pinia和Vuex对比

Pinia 是 Vue 官方团队成员专门开发的一个全新状态管理库,并且 Vue 的官方状态管理库已经更改为了 Pinia。 在 Vuex 官方仓库中也介绍说可以把 Pinia 当成是不同名称的 Vuex 5,这也意味不会再出 5 版本了。 优点 1. 更加轻量级,压缩后提交只…

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…

Oracle双平面适用场景讨论会议

4月28日,我在杭州组织召开了Oracle双平面会议讨论沙龙。在国产化数据库浪潮的今天,Oracle数据库作为国产数据库的应急库,在国产数据库发生故障或者性能下降时,如何更好的使用Oracle。会议主题如下: 1、背景与痛点速览&…

10.Linux进程信号

1. 理解信号 信号VS信号量 老婆:老婆饼-》没有任何关系!信号:闹钟,上课铃声,脸色...人-》进程;信号中断人正在做的事,是一种事件的异步通知机制; 我们自习一会,等张三回…

求解插值多项式及其余项表达式

例 求满足 P ( x j ) f ( x j ) P(x_j) f(x_j) P(xj​)f(xj​) ( j 0 , 1 , 2 j0,1,2 j0,1,2) 及 P ′ ( x 1 ) f ′ ( x 1 ) P(x_1) f(x_1) P′(x1​)f′(x1​) 的插值多项式及其余项表达式。 解: 由给定条件,可确定次数不超过3的插值多项式。…