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

发布时间:2023年12月22日

前言

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

问题

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

分析

  1. 看启动日志,看看究竟慢在哪里
    找出如下卡住一分钟左右,弹出的后面几段日志
[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
[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参数加入如下:
-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

文章来源:https://blog.csdn.net/qq_27759825/article/details/135149744
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。