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

news2025/6/6 13:21:23

背景

最近查看日志发现某服务偶现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: true
    fetch-registry: true
    initial-instance-info-replication-interval-seconds: 5
    instance-info-replication-interval-seconds: 10
  instance:
    prefer-ip-address: true
    ip-address: xxx.xxx.xxx.xxx
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
    lease-renewal-interval-in-seconds: 10
    lease-expiration-duration-in-seconds: 30

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

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

3. 添加重试机制

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

4. 监控和诊断

@Component
public class ServiceHealthMonitor {
    
    @Autowired
    private 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() {
        // 服务调用逻辑
    }
    
    @Recover
    public String recover(UnknownHostException ex) {
        logger.error("服务调用失败,启用降级策略", ex);
        return "服务暂时不可用";
    }
}

验证步骤

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

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

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

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

相关文章

Transformer实战——词嵌入技术详解

Transformer实战——词嵌入技术详解 0. 前言1. 词嵌入基础2. 分布式表示3. 静态嵌入3.1 Word2Vec3.2 GloVe 4. 使用 Gensim 构建词嵌入5. 使用 Gensim 探索嵌入空间6. 动态嵌入小结系列链接 0. 前言 在本节中,我们首先介绍词嵌入的概念,然后介绍两种实现…

[pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在本账号CSDN资源下载,或者访问链接: http://www.umlchina.com/url/quizad.html 如果需要提取码:umlc 文件夹中的“300道软件方法强化自测题2025…

Vue3入门指南:从零到精通的快速上手

齐爷学vue3 一、Vue3入门 vite:前端构架工具,构建速度快于webpack。轻量快速、对TS,JSX,CSS开箱即用、按需编译。 创建Vue3工程 1.在想要创建Vue3的位置打开cmd,执行如下命令。 npm create vuelatest 2.功能只选择…

吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py

前提条件: 1、吴恩达MCP课程(5):research_server_prompt_resource.py 2、server_config_prompt_resource.json文件 {"mcpServers": {"filesystem": {"command": "npx","args"…

设计模式——抽象工厂设计模式(创建型)

摘要 抽象工厂设计模式是一种创建型设计模式,旨在提供一个接口,用于创建一系列相关或依赖的对象,无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建,相比工厂方法模式,能创建一个产品族。该模…

基于LocalAI与cpolar技术协同的本地化AI模型部署与远程访问方案解析

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址前言 各位极客朋友们!今天要向大家推荐一套创新性的本地部署方案——LocalAI技术架构。这款开源工具包能够将普通配置的笔记本电脑转化为具备强大算力的AI工作站,轻松实现…

霍尔效应传感器的革新突破:铟化铟晶体与结构演进驱动汽车点火系统升级

一、半导体材料革新:铟化铟晶体的电压放大机制 铟化铟(InSb)晶体因其独特的能带结构,成为提升霍尔电压的关键材料。相较于传统硅基材料,其载流子迁移率高出3-5倍,在相同磁场强度下可显著放大霍尔电压。其作…

无法运用pytorch环境、改环境路径、隔离环境

一.未建虚拟环境时 1.创建新项目后,直接运行是这样的。 2.设置中Virtualenv找不到pytorch环境?因为此时没有创建新虚拟环境。 3.选择conda环境(全局环境)时,是可以下载环境的。 运行结果如下: 是全局环境…

从0开始学vue:pnpm怎么安装

一、什么是 pnpm? pnpm(Performant npm)是新一代 JavaScript 包管理器,优势包括: 节省磁盘空间:通过硬链接和符号链接实现高效存储安装速度更快:比 npm/yarn 快 2-3 倍内置工作区支持&#xf…

Python 网络编程 -- WebSocket编程

作者主要是为了用python构建实时网络通信程序。 概念性的东西越简单越好理解,因此,下面我从晚上摘抄的概念 我的理解。 什么是网络通信? 更确切地说,网络通信是两台计算机上的两个进程之间的通信。比如,浏览器进程和新浪服务器上的某个Web服务进程在通…

边缘计算应用实践心得

当数据中心的光纤开始承载不了爆炸式增长的物联网数据流时,边缘计算就像毛细血管般渗透进现代数字肌理的末梢。这种将算力下沉到数据源头的技术范式,本质上是对传统云计算中心化架构的叛逆与补充——在智能制造车间里,实时质检算法直接在工业…

EXCEL如何快速批量给两字姓名中间加空格

EXCEL如何快速批量给姓名中间加空格 优点:不会导致排版混乱 缺点:无法输出在原有单元格上,若需要保留原始数据,可将公式结果复制后“选择性粘贴为值” 使用场景:在EXCEL中想要快速批量给两字姓名中间加入空格使姓名对…

Jenkins | Linux环境部署Jenkins与部署java项目

1. 部署jenkins 1.1 下载war包 依赖环境 jdk 11 下载地址: https://www.jenkins.io/ 依赖环境 1.2 启动服务 启动命令 需要注意使用jdk11以上的版本 直接启动 # httpPort 指定端口 #-Xms2048m -Xmx4096m 指定java 堆内存初始大小 与最大大小 /usr/java/jdk17/bin/java…

react私有样式处理

react私有样式处理 Nav.jsx Menu.jsx vue中通过scoped来实现样式私有化。加上scoped,就属于当前组件的私有样式。 给视图中的元素都加了一个属性data-v-xxx,然后给这些样式都加上属性选择器。(deep就是不加属性也不加属性选择器) …

UDP/TCP协议全解

目录 一. UDP协议 1.UDP协议概念 2.UDP数据报格式 3.UDP协议差错控制 二. TCP协议 1.TCP协议概念 2.三次握手与四次挥手 3.TCP报文段格式(重点) 4.流量控制 5.拥塞控制 一. UDP协议 1.UDP协议概念 当应用层的进程1要向进程2传输报文&#xff…

Duix.HeyGem:以“离线+开源”重构数字人创作生态

在AI技术快速演进的今天,虚拟数字人正从高成本、高门槛的专业领域走向大众化应用。Duix.HeyGem 数字人项目正是这一趋势下的杰出代表。该项目由一支拥有七年AI研发经验的团队打造,通过放弃传统3D建模路径,转向真人视频驱动的AI训练模型,成功实现了低成本、高质量、本地化的…

ubuntu22.04安装megaton

前置 sudo apt-get install git cmake ninja-build generate-ninja安装devkitPro https://blog.csdn.net/qq_39942341/article/details/148388639?spm1001.2014.3001.5502 安装cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 …

Windows应用-GUID工具

下载本应用 我们在DirectShow和媒体基础程序的调试中,将会遇到大量的GUID,调试窗口大部分情况下只给出GUID字符串,此GUID代表什么,我们无从得知。这时,就需要此“GUID工具”,将GUID字符串翻译为GUID定义&am…

vue+element-ui一个页面有多个子组件组成。子组件里面有各种表单,实现点击enter实现跳转到下一个表单元素的功能。

一个父组件里面是有各个子组件的form表单组成的。 我想实现点击enter。焦点直接跳转到下一个表单元素。 父组件就是由各个子组件构成 子组件就像下图一样的都有个el-form的表单。 enterToTab.js let enterToTab {}; (function() {// 返回随机数enterToTab.addEnterListener …

Vehicle HAL(5)--vhal 实现设置属性的流程

目录 1. ard11 vhal 设置属性的时序图 CarService > vhal > CarService 2. EmulatedVehicleHal::set(xxx) 的实现 本文介绍ard11的vhal属性设置流程图。 1. ard11 vhal 设置属性的时序图 CarService > vhal > CarService 2. EmulatedVehicleHal::set(xxx) 的实现…