本地启动项目注册到线上nacos,通过网关却无法访问到本地服务问题

1、背景

线上开发环境服务已经在跑,本地idea启动服务,通过postman调用网关地址,却总是访问的线上开发环境的服务,而并没有默认轮询的方式调用到本地服务。

2、排查过程

本地idea启动的项目配置:正常,启用的是和线上开发环境相同的配置
在这里插入图片描述
线上网关服务:正常,忽略
线上nacos服务注册:
在这里插入图片描述
发现只注册了线上服务的ip,并未注册本地ip
查看开发环境的配置:
在这里插入图片描述
发现服务发现配的是固定值-开发环境ip
将该配置注释掉后,重启本地服务(可能不需要重启),再去查看服务注册,发现多了一个ip,应该是本地的ip了
在这里插入图片描述
然后重新调用接口,发现第二次一直在转圈,最终失败,经排查是找不到服务。明明已经注册了,为什么会找不到呢?
ipconfig查看本地的IP:
在这里插入图片描述
发现有两个,下面的是无线网IP(当前使用的无线网连接),第一个啥,VMware的?服务注册的就是这个地址。为此网上查了下vm1和vm8。还真是VMware的!那问题找到了,这个VMware的虚拟ip上并没有运行我的项目,必然找不到,服务注册ip应该是第二个才对。那么怎么注册第二个呢?

3、解决

1、简单粗暴,直接卸载VMware
2、禁用虚拟网卡
控制面板 → 网络和共享中心 → 更改适配器设置
禁用掉所有虚拟机的网络
3、配置中设定忽略指定网络

spring:
  cloud:
    inetutils:
        # 可用正则表达式,表示禁用以VMware开头的网络
        ignoredInterfaces: ['VMware.*'] 
        # 可用ip地址段表示
        preferred-networks: ['85.1']
        use-only-site-local-interfaces: true

对了,不能指定服务发现的ip,如方式4的截图,我当前采用此方式,nacos的服务注册ip已经正确
在这里插入图片描述

4、手动指定ip
在这里插入图片描述
其实就是线上ip和本地ip二选一
如果是eureka的话,则配置如下

eureka: 
  instance: 
    # 配置主机名
    hostname: registry
    prefer-ip-address: true
    instance-id: ${eureka.instance.ip-address}:${server.port}
    ip-address: 10.112.11.108

如果用的是eureka做注册中心时,方式3虽然能够让服务之间访问正确的 ip 地址,但是 ${spring.cloud.client.ip-address} 依旧为虚拟网卡的 ip ,因此如果以 s p r i n g . c l o u d . c l i e n t . i p − a d d r e s s : {spring.cloud.client.ip-address}: spring.cloud.client.ipaddress:{server.port}的格式注册到注册中心,显示的地址依旧可能是虚拟网卡的地址,只是不影响使用。但是方式4能解决方式3显示问题,缺点就是硬编码写死的。

补充

要想实现通过线上网关调用本地服务(debug),还有一种方法:nacos配置中心,克隆一个配置改个名字,然后本地项目配置名称换成克隆的配置名称(配置名和项目名一致),再增加对应得网关配置即可。本地启动项目后,nacos会有一个新的服务名称的服务。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Yin

您获益,我得意,您打赏,我敬礼

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值