本地无法连接注册中心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

相关推荐
fengxin_rou12 分钟前
深入理解Java类加载机制:从原理到实战详解
java·开发语言
糖果店的幽灵13 分钟前
Spring AI 从入门到精通-Prompt 工程
java·spring·prompt
小江的记录本15 分钟前
【Spring全家桶】Spring Cloud 2023.0.x:配置中心:Nacos Config、Apollo(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·python·spring·spring cloud·面试
weixin_4083180417 分钟前
2026年医疗直播行业趋势报告:技术方向、监管变化与市场格局
java·大数据·人工智能
linge_sun18 分钟前
SpringAI 五步提示词大法:构建高效 AI 提示词
java·人工智能·ai编程
huipeng92622 分钟前
企业级微服务开发实战(三):公共模块设计与统一规范封装
java·spring boot·spring cloud·微服务·架构·系统架构·php
我登哥MVP28 分钟前
Spring Boot 从“会用”到“精通”:参数绑定体系全景
java·spring boot·spring·servlet·maven·intellij-idea·mybatis
C137的本贾尼30 分钟前
JDBC 编程:用 Java 连接 MySQL
java·开发语言·mysql
我是一颗柠檬37 分钟前
【Redis】Redis性能优化Day14(2026年)
数据库·redis·性能优化
华大哥37 分钟前
spring boot 和php 调用 LibreOffice 转换 Excel 到 PDF 完整实现
java·pdf·excel