本地无法连接注册中心eureka,如何进行feign调用,并快速启动本地调试?

前言

今年进入了个新公司,接手代码时遇到了比较蛋疼的事情,本地代码调试遇到了层层阻碍,无法一键简单启动就算了,我就忍了,一番操作终于启动起了了,启动又慢,启动了2~3分钟,后面调本地接口,还feign调用失败。出师未捷身先死 啊,又没人整改下,好奇项目负责人也不改,他们是怎么进行调试和自测的,靠感觉和代码自信吗?

上图:

问题

  1. 本地启动时间慢
  2. feign调用失败

分析

  1. 看启动日志,看看究竟慢在哪里
    找出如下卡住一分钟左右,弹出的后面几段日志
bash 复制代码
[2023-12-22 14:11:35.116]|WARN|main|||N/A|N/A|N/A|c.n.d.s.t.d.RetryableEurekaHttpClient#execute:130|Request execution failed with message: I/O error on GET request for "http://qz:123456@10.23.11.55:7000/eureka/apps/": Connect to 10.23.11.55:7000 [/10.23.11.55] failed: Operation timed out (Connection timed out); nested exception is org.apache.http.conn.HttpHostConnectException: Connect to 10.23.11.55:7000 [/10.23.11.55] failed: Operation timed out (Connection timed out)
[2023-12-22 14:11:35.120]|WARN|main|||N/A|N/A|N/A|c.netflix.discovery.DiscoveryClient#get:304|Using default backup registry implementation which does not do anything.

日志中很明显写着连接eureka Connection timed out。

  1. 找出feign 为什么不能调用
    其实根据上个分析已经可以看出,本地服务并没有连接到eureka注册中心,那他肯定拉不到注册中心的服务列表,自然就调不通了,从调用日志也可以直观的看出 Load balancer does not contain an instance for the service
bash 复制代码
[2023-12-22 14:11:36.979]|WARN|pool-20-thread-1|||N/A|N/A|N/A|c.qz.common.config.CommonInitialize#lambda$run$0:57|[503] during [GET] to [http://qz-usercenter/getDataDictByType/message] [UserCenterFeign#getDataDictByType(String)]: [Load balancer does not contain an instance for the service qz-usercenter]

根本原因

因为本地和eureka是网络隔离的,所以不存在eureka问题或者本地程序问题,只是网络问题而已,但是这个是无解的,所以放弃挣扎,需要曲线救国

目的

很简单的目的,就是快速启动,顺利调试(OS:这不是个正常项目应该有的吗?)

解决方案

  1. 解决feign调用问题
    使用url重写的方法,解决本地调用问题,让本地服务调用测试环境的接口
    原代码:

    修改之后:

    图中用一种"可配置 "并且"默认在没配置的情况下采用默认的注册中心的跳转 ",这样的好处是,如果上生产或者其他环境,不用配这个url可以按照原来的方式进行调用,如果配置了url则安url的调用路径走,而且是可配置的,可以更改调用,对代码不具有侵入性
    单独弄个本地的配置文件application-local.yml,供本地调试用

    到这里feign调用是解决了,本地调试是没问题了
  2. 解决启动时间慢问题
    其实很简单,整个日志中,他就是在等待eureka连接超时 了,在根本原因中提到了,本地和eureka的网络是隔离 的,这个无法改变。那我们都进行feign的url定向重写了,注册中心在这就没用了,而且本地调试,其实不想影响测试环境的服务,最好别注册上去 。如果你们有自己的开发环境可以忽略这个考虑,如果只有测试环境的话,分分钟会影响测试结果,因为连接到注册中心会让测试环境的调用,调用到你本机。
    从根源上入手,提供给大家一个断开eureka的配置,在启动程序的vm参数加入如下:
bash 复制代码
-Deureka.client.register-with-eureka=false
-Dspring.autoconfigure.exclude=org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration,org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
  1. idea配置(最终的配置展示)

结果展示

140s->62s,提升54%的启动速度,1分钟启动还可以接受,后面看到主要花在连接数据库上,这个就不优化了,最主要是可以进行本地调用接口了。

END

相关推荐
苏瞳儿18 小时前
java对数据库的增删改查
java·数据库·oracle
zhangjw3418 小时前
Java基础语法:变量、数据类型与运算符,从原理到实战
java·开发语言
yaoxin5211231 天前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
java·开发语言·python
Greyson11 天前
Layui表格如何使用第三方插件实现树形展示.txt
jvm·数据库·python
2401_871696521 天前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python
NotFound4861 天前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
a9511416421 天前
CSS如何实现元素隐藏不占位_使用display-none完全移除
jvm·数据库·python
一 乐1 天前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
鱼鳞_1 天前
Java学习笔记_Day29(异常)
java·笔记·学习
烟锁池塘柳01 天前
一文讲透 C++ / Java 中方法重载(Overload)与方法重写(Override)在调用时机等方面的区别
java·c++·面向对象