当前位置: 首页 > article >正文

springcloud openfeign 请求报错 java.net.UnknownHostException:

现象

在这里插入图片描述

背景

项目内部服务之间使用openfeign通过eureka注册中心进行服务间调用,与外部通过http直接调用。外部调用某个业务方提供的接口需要证书校验,因对方未提供证书故设置了忽略证书校验代码如下

@Configuration
public class IgnoreHttpsSSLClient {@Bean
@ConditionalOnMissingBean
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory) throws NoSuchAlgorithmException, KeyManagementException {
SSLContext ctx = SSLContext.getInstance("SSL");
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
ctx.init(null, new TrustManager[]{tm}, null);
return new LoadBalancerFeignClient(new Client.Default(ctx.getSocketFactory(),
new HostnameVerifier() {@Override
public boolean verify(String hostname, SSLSession session) {
// TODO Auto-generated method stub
return true;
}
}),
cachingFactory, clientFactory);
}}

看着没毛病,但@Configuration注解其实是对所有的feignclient都做了忽略证书处理。不过不要紧,因为其他服务都不需要证书,如此,程序运行了很久,终于一次架构升级的需求到来,开发人员升级完版本上述代码出现了编译错误,因时间久远某些jar发生了变更,不得已开发人员删除了部分内容,更新了代码然后没经过充分测试上线了,bug如期产生了,更新代码如下

@Configuration
public class IgnoreFeignHttpsSSLClient {
@Bean
@ConditionalOnMissingBean
public Client feignClient() {
try {
SSLContext ctx = SSLContext.getInstance("SSL");
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
ctx.init(null, new TrustManager[]{tm}, null);
return new Client.Default(ctx.getSocketFactory(), (hostname, session) -> true);
} catch (Exception e) {
return null;
}
}
}

给各位3s秒钟能看出问题么,好了公布答案feignclient 由LoadBalancerFeignClient 更改成了默认feignclient导致服务间调用全都走http调用所以报了java.net.UnknownHostException。

解决方法

产生问题根本原因是应用@configuration注解作用了所有feignclient,那解决方案很简单删掉这个注解即可。

http://www.lryc.cn/news/2396374.html

相关文章:

  • 【harbor】--配置https
  • Oracle 临时表空间详解
  • 深入理解享元模式:用Java实现高效对象共享
  • OptiStruct实例:消声器前盖ERP分析(2)RADSND基础理论
  • barker-OFDM模糊函数原理及仿真
  • Linux.docker.k8s基础概念
  • GIT命令行的一些常规操作
  • 近期知识库开发过程中遇到的一些问题
  • 3.RV1126-OPENCV 图像叠加
  • 使用 HTML + JavaScript 实现一个日历任务管理系统
  • 车载诊断架构SOVD --- 车辆发现与建连
  • Notepad++找回自动暂存的文件
  • DL00924-基于深度学习YOLOv11的工程车辆目标检测含数据集
  • Axure RP11安装、激活、汉化
  • 【PhysUnits】15.6 引入P1后的左移运算(shl.rs)
  • 自编码器Auto-encoder(李宏毅)
  • 数据结构之堆(topk问题、堆排序)
  • SpringBoot使用ffmpeg实现视频压缩
  • 【Elasticsearch】exists` 查询用于判断文档中是否存在某个指定字段。它检查字段是否存在于文档中,并且字段的值不为 `null`
  • 2025-05-31 Python深度学习9——网络模型的加载与保存
  • 长安链起链调用合约时docker ps没有容器的原因
  • Appium+python自动化(七)- 认识Appium- 上
  • 数据中心双活架构解决方案
  • YOLOv5 详解:从原理到实战的全方位解析
  • 模块联邦:更快的微前端方式!
  • 前端基础学习html+css+js
  • 手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席
  • TCP三次握手/四次握手-TCP/IP四层模型-SSL/TLS-HTTP-HTTPS
  • SAP Business One:无锡哲讯科技助力中小企业数字化转型的智慧之选
  • 【Ubuntu远程桌面】